Qt4: события кнопки мыши QTableView не перехвачены - PullRequest
6 голосов
/ 27 января 2010

У меня есть 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 event! » Однако сообщение « MouseButtonPress! » появляется только при нажатии на очень тонкую границу, окружающую всю таблицу.

Ответы [ 2 ]

10 голосов
/ 27 января 2010

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

Поэтому я предлагаю:

QTableView * itsView = new QTableView;
itsView->viewport()->installEventFilter(this);

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

Надеюсь, это поможет!

2 голосов
/ 27 января 2010

Если вам нужно показать контекстное меню, вы можете использовать customContextMenuRequested сигнал tableview; вам нужно установить политику контекстного меню на 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;
}

Надеюсь, это поможет, привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...