Qt QListView - контекстные меню?

Я пытаюсь добавить контекстное меню (щелчок правой кнопкой мыши) в Qt QListView. Я вижу в Qt 3.3 есть "contextMenuRequested" (который я мог бы использовать) - http://doc.qt.digia.com/3.3/qlistview.html#contextMenuRequested. Однако я не вижу такого метода в Qt4. Кто-нибудь знает, как добавить контекстное меню в QListView?


person QLatvia    schedule 19.05.2010    source источник


Ответы (3)


В зависимости от того, как вы настроили ContextMenuPolicy в QWidget вы есть несколько вариантов.

Если вы установили его на Qt::DefaultContextMenu, просто переопределите защищенную функцию contextMenuEvent(QContextMenuEvent*) в QWidget. Я считаю, что это значение по умолчанию.

Если вы установили его на Qt::ActionsContextMenu, просто добавьте все свои действия в свой виджет и позвольте системе Qt отображать контекстное меню.

Или, если вы установили его на Qt::CustomContextMenu, вам нужно подключиться к сигналу customContextMenuRequested() и реализовать собственный обработчик контекстного меню.

Все это описано в документации ContextMenuPolicy, доступной в Интернете.

person Daemin    schedule 06.10.2011
comment
Обновлены ссылки на описание ContextMenuPolicy: qt5 и qt4 - person avtomaton; 01.07.2015

Я не знаю, чего вы пытаетесь достичь, но вы можете легко добавить контекстное меню в любой виджет, вызвав QWidget::AddAction(QAction*) с действиями, которые вы хотите добавить в свое контекстное меню, и установив политику контекстного меню.

widget->setContextMenuPolicy(Qt::ActionsContextMenu);

виджет подготовит и покажет контекстное меню, все, что вам нужно сделать, это подключить сигналы действий triggered() к соответствующим обработчикам

person Harald Scheirich    schedule 20.05.2010

Я не знаю, почему сигнал был удален, но он по-прежнему QWidget, так что вы всегда можете переопределить его.

void QWidget::contextMenuEvent ( QContextMenuEvent* );

or

void QWidget::customContextMenuRequested( const QPoint& pos );

в зависимости от настройки политики контекстного меню для виджета.

person Troubadour    schedule 19.05.2010
comment
customContextMenuRequested() — это сигнал, а не переопределяемая функция. - person Harald Scheirich; 20.05.2010