Qt4:未捕获QTableView鼠标按钮事件

rcv*_*rcv 6 user-interface qt qt4

我有一个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");
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我正确地获得了所有的KeyPress事件:当我突出显示一个单元格并按下一个键时,我收到" KeyPress事件! "消息.但是,当我点击整个桌子周围非常薄的边框时,我只收到" MouseButtonPress事件! "消息.

And*_*y M 10

这是因为Tableview是这个薄边框...如果你想访问小部件的内容,你应该在Tableview的视口上安装eventFilter !

因此,我建议:

QTableView * itsView = new QTableView;
itsView->viewport()->installEventFilter(this);
Run Code Online (Sandbox Code Playgroud)

试试这个,它应该解决你的问题!

希望能帮助到你 !