Qt QListView - контекстные меню? - PullRequest
7 голосов
/ 20 мая 2010

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

Ответы [ 3 ]

19 голосов
/ 06 октября 2011

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

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

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

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

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

6 голосов
/ 20 мая 2010

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

widget->setContextMenuPolicy(Qt::ActionsContextMenu);

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

2 голосов
/ 20 мая 2010

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

void QWidget::contextMenuEvent ( QContextMenuEvent* );

или

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

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

...