以QSqlTableModel为模型的QTableView,如何实现鼠标悬停单元格时弹出单元格的Tooltip并显示单元格内容,给出具体完整的C++代码示例
时间: 2024-12-30 10:39:04 浏览: 74
在Qt中,你可以通过监听`QTableWidget`或`QTableView`的`cellChanged`或`cellDoubleClicked`信号,并在信号处理函数中设置单元格的`toolTip`属性来实现这个功能。然而,由于`QSqlTableModel`并不直接支持`toolTip`属性,你需要手动获取并设置数据。以下是使用`QSqlTableModel`和`QTableView`的一个简化示例:
```cpp
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlTableModel>
#include <QTableView>
#include <QApplication>
#include <QEvent>
class MyModel : public QSqlTableModel
{
public:
explicit MyModel(QObject *parent = nullptr)
: QSqlTableModel(parent) {}
protected:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override {
if (role == Qt::ToolTipRole && index.column() >= 0 && index.row() >= 0) {
QSqlRecord record = this->record(index);
return record.value(index.column()).toString();
}
return QSqlTableModel::data(index, role);
}
bool setRecord(const QSqlRecord &record, int row = -1) override {
return QSqlTableModel::setRecord(record, row);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("YOUR_DATABASE_CONNECTION");
db.open();
MyModel model;
model.setTable("YOUR_TABLE_NAME");
QTableView tableView;
tableView.setModel(&model);
// 监听单元格更改事件
connect(&model, &MyModel::cellChanged, [&tableView](const QModelIndex &index) {
tableView.setToolTip(index.data(Qt::ToolTipRole).toString());
});
tableView.show();
return app.exec();
}
```
在这个示例中,我们创建了一个自定义的`MyModel`类,它从`QSqlTableModel`继承并覆盖了`data`方法,以便在返回值时检查是否应该提供工具提示。然后在主程序中,我们连接了`cellChanged`信号到一个槽函数,该函数会更新单元格的工具提示。
注意替换`"YOUR_DATABASE_CONNECTION"`为你实际的数据库连接字符串,以及`"YOUR_TABLE_NAME"`为你要操作的表名。
阅读全文
相关推荐


















