Я пытаюсь добавить контекстное меню (щелчок правой кнопкой мыши) в Qt QListView. Я вижу в Qt 3.3 есть "contextMenuRequested" (который я мог бы использовать) - http://doc.qt.digia.com/3.3/qlistview.html#contextMenuRequested. Однако я не вижу такого метода в Qt4. Кто-нибудь знает, как добавить контекстное меню в QListView?
Qt QListView - контекстные меню?
Ответы (3)
В зависимости от того, как вы настроили ContextMenuPolicy в QWidget
вы есть несколько вариантов.
Если вы установили его на Qt::DefaultContextMenu
, просто переопределите защищенную функцию contextMenuEvent(QContextMenuEvent*)
в QWidget
. Я считаю, что это значение по умолчанию.
Если вы установили его на Qt::ActionsContextMenu
, просто добавьте все свои действия в свой виджет и позвольте системе Qt отображать контекстное меню.
Или, если вы установили его на Qt::CustomContextMenu
, вам нужно подключиться к сигналу customContextMenuRequested()
и реализовать собственный обработчик контекстного меню.
Все это описано в документации ContextMenuPolicy, доступной в Интернете.
Я не знаю, чего вы пытаетесь достичь, но вы можете легко добавить контекстное меню в любой виджет, вызвав QWidget::AddAction(QAction*)
с действиями, которые вы хотите добавить в свое контекстное меню, и установив политику контекстного меню.
widget->setContextMenuPolicy(Qt::ActionsContextMenu);
виджет подготовит и покажет контекстное меню, все, что вам нужно сделать, это подключить сигналы действий triggered()
к соответствующим обработчикам
Я не знаю, почему сигнал был удален, но он по-прежнему QWidget
, так что вы всегда можете переопределить его.
void QWidget::contextMenuEvent ( QContextMenuEvent* );
or
void QWidget::customContextMenuRequested( const QPoint& pos );
в зависимости от настройки политики контекстного меню для виджета.