业务上遇到一些需求,某个需求是当鼠标移动到QTableView的item上时,显示该item的某些信息。首先想到的思路就是鼠标悬浮事件,即安装QTableView的事件过滤器,然后在eventFilter进行判断即可。实现很简单,主要在针对qt界面处理子界面的事件响应时,主要是还没搞清楚ui.tableView->viewport()->installEventFilter(this)的使用场景,就先记录一下。步骤如下:
1、安装QTableView的事件过滤器
ui.tableView->installEventFilter(this);
网上有一种说法,还需要使用ui.tableView->viewport()->installEventFilter(this),否则QTableView的事件过滤器无效,不过我目前还没有遇到这种情况。
2、重写eventFilter文章来源:https://www.toymoban.com/news/detail-536526.html
bool MyViewWidget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui.tableView)
{
if (event->type() == QEvent::HoverMove)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
QPoint pt = mouseEvent->pos();
qDebug() << "move:" << pt;
QModelIndex index = ui.tableView->indexAt(pt);
if (!index.isValid())
{
return QWidget::eventFilter(obj, event);
}
qDebug() << "index.row:" << index.row()
<< " index.column:" << index.column();
onShowInfo(index.row() + 1, index.column() + 1);
}
}
return QWidget::eventFilter(obj, event);
}
以上代码捕获到鼠标悬浮在QTableview上的事件,然后根据鼠标的pos得出当前的item的QModelIndex。文章来源地址https://www.toymoban.com/news/detail-536526.html
到了这里,关于Qt之QTableView显示鼠标悬浮下的项的信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!