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;
}
надеюсь, что это поможет, с уважением.