业务上遇到一些需求,某个需求是当鼠标移动到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

bool MyViewWidget::eventFilter(QObject *obj, QEvent *event)

{

if (obj == ui.tableView)

{

if (event->type() == QEvent::HoverMove)

{

QMouseEvent* mouseEvent = static_cast(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。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: