Qt4:未捕获 QTableView 鼠标按钮事件
Posted
技术标签:
【中文标题】Qt4:未捕获 QTableView 鼠标按钮事件【英文标题】:Qt4: QTableView mouse button events not caught 【发布时间】:2010-01-27 00:37:39 【问题描述】:我有一个QTableView
,我在其中显示了一个自定义模型。我想点击鼠标右键,以便可以在基础表数据上打开上下文下拉菜单:
MainWindow::MainWindow()
QTableView * itsView = new QTableView;
itsView->installEventFilter(this);
... //Add other widgets and display them all
bool MainWindow::eventFilter(QObject * watched, QEvent * event)
if(event->type() == QEvent::MouseButtonPress)
printf("MouseButtonPress event!\n");
else if(event->type() == QEvent::KeyPress)
printf("KeyPress event!\n");
奇怪的是,我正确地得到了所有 KeyPress 事件:当我突出显示一个单元格并按下一个键时,我得到了“KeyPress 事件!”消息。但是,当我单击整个表格周围的非常细的边框时,我只会收到“MouseButtonPress 事件!”消息。
【问题讨论】:
【参考方案1】:这是因为 Tableview 是这么细的边框...如果您想访问小部件的内容,您应该将 eventFilter 安装在 Tableview 的视口上!
因此我建议:
QTableView * itsView = new QTableView;
itsView->viewport()->installEventFilter(this);
试试这个,它应该可以解决你的问题!
希望对你有帮助!
【讨论】:
六年后,这个答案为我节省了很多时间和烦恼。谢谢! @GuyGizmo 我很高兴听到这个消息 :) 感谢您光临 ;)【参考方案2】:如果需要显示上下文菜单,可以使用tableview
的customContextMenuRequested 信号;您需要将上下文菜单策略设置为 Qt::CustomContextMenu
才能触发此信号。像这样的:
...
itsView->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(itsView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(tableContextPopup(const QPoint &)));
...
void MainWindow::tableContextPopup(const QPoint & pos)
qDebug() << "show popup " << pos;
希望这会有所帮助,问候。
【讨论】:
以上是关于Qt4:未捕获 QTableView 鼠标按钮事件的主要内容,如果未能解决你的问题,请参考以下文章