Qt4: события кнопки мыши QTableView не пойманы

у меня есть 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");
}

странно, я получаю все события нажатия клавиш правильно: когда у меня выделена ячейка и нажмите клавишу, я получаю "событие нажатия клавиши!" сообщение. Однако я получаю только "MouseButtonPress событие!" сообщение, когда я нажимаю на очень тонкую границу вокруг всего стола.

2 ответов


это потому, что Tableview-это тонкая граница... Если вы хотите получить доступ к содержимому виджета, вы должны установить eventFilter на видовое окно Tableview !

Я предлагаю :
QTableView * itsView = new QTableView;
itsView->viewport()->installEventFilter(this);

попробуй, это должно исправить вашу проблему !

надеюсь, что это помогает !


Если вам нужно показать контекстное меню, вы можете использовать customContextMenuRequested сигнал tableview; вам нужно будет установить политику контекстного меню в Qt::CustomContextMenu для запуска этого сигнала. Что-то вроде этого:--6-->

...
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;
}

надеюсь, что это поможет, с уважением.