以QSqlTableModel为模型的QTableView,如何实现鼠标悬停单元格时Tooltip显示单元格内容
时间: 2024-12-30 19:38:56 浏览: 14
在使用QSqlTableModel作为数据源,并配合QTableView展示数据时,要在鼠标悬停单元格时显示单元格内容作为Tooltip,可以按照以下步骤操作:
1. 首先,确保你已经创建了一个QSqlTableModel实例并填充了数据。
```cpp
QSqlDatabase db = QSqlDatabase::addDatabase("你的数据库驱动");
if (!db.open("你的数据库连接")) {
// 处理打开失败的情况
}
QSqlQuery query("SELECT * FROM your_table");
model = new QSqlTableModel(this);
if (model->setTable(query.exec())) {
view.setModel(model);
} else {
// 处理设置表失败的情况
}
```
2. 然后,在QTableView上启用行单击事件处理和hover模式,以便捕捉悬停事件:
```cpp
view.setEditTriggers(QAbstractItemView::NoEditTriggers); // 防止编辑单元格
view.setSelectionBehavior(QAbstractItemView::SelectRows);
view.setMouseTracking(true); // 开启鼠标跟踪
```
3. 接下来,你需要自定义`cellChanged()`和`viewportHovered()`槽函数,当鼠标悬停在视口上时,检查鼠标位置对应的数据项,然后显示Tooltip:
```cpp
void MyWindow::cellChanged(const QModelIndex ¤tIndex) {
// ... cellChanged() 处理单元格改变后的逻辑
}
void MyWindow::viewportHovered(const QPoint &pos) {
if (!model || !model->hasIndex(pos.x(), pos.y(), model->parent()))
return;
QModelIndex index = model->index(pos.y(), pos.x());
if (index.isValid()) {
QString tooltipText = model->data(index, Qt::DisplayRole).toString();
show_tooltip(tooltipText, index.row(), index.column()); // 自定义函数显示Tooltip
}
}
// 定义显示Tooltip的函数
void MyWindow::show_tooltip(const QString &text, int row, int column) {
QWhatsThis::showText(view.mapToGlobal(view.visualRect(index)), text);
}
```
在这里,我们使用`Qt::DisplayRole`获取单元格的显示文本。如果你需要其他类型的数据显示,可以替换这个角色名。`showTooltip`函数使用QWhatsThis库来显示Tooltip,记得包含所需的头文件:`#include <qwhatsthis.h>`。
阅读全文