Название: Динамическое формирование меню Отправлено: radislav72 от Июль 06, 2014, 11:38 Здравствуйте!
Как лучше сделать, чтоб перед отображение меню QMenu можно было его формировать по-разному, в зависимости от некоторых условий? Т.е. как отловить и где момент отображения меню? Название: Re: Динамическое формирование меню Отправлено: Bepec от Июль 06, 2014, 11:45 Вы сами его вызываете, вот в том месте и меняйте.
Для виджета это contextMenuEvent к примеру. Название: Re: Динамическое формирование меню Отправлено: radislav72 от Июль 06, 2014, 11:53 Не, я его привязал к кнопке и меню появляется при ее нажатии автоматически:
Код: QMenu* mnOperations = new QMenu(this); Название: Re: Динамическое формирование меню Отправлено: gil9red от Июль 06, 2014, 12:16 Отлавливайте сигнал void QMenu::aboutToShow () (http://qt-project.org/doc/qt-4.8/qmenu.html#aboutToShow) и в слоте, делайте с меню что захотите :)
Название: Re: Динамическое формирование меню Отправлено: Igors от Июль 06, 2014, 12:46 Отлавливайте сигнал void QMenu::aboutToShow () (http://qt-project.org/doc/qt-4.8/qmenu.html#aboutToShow) и в слоте, делайте с меню что захотите :) А как быть с горячими/холодными клавишами, напр Ctrl+O ?Название: Re: Динамическое формирование меню Отправлено: gil9red от Июль 06, 2014, 12:59 Отлавливайте сигнал void QMenu::aboutToShow () (http://qt-project.org/doc/qt-4.8/qmenu.html#aboutToShow) и в слоте, делайте с меню что захотите :) А как быть с горячими/холодными клавишами, напр Ctrl+O ?Цитировать Как лучше сделать, чтоб перед отображение меню QMenu можно было его формировать по-разному, в зависимости от некоторых условий? Т.е. как отловить и где момент отображения меню? Такой был вопрос автора, и я на него ответил :DНазвание: Re: Динамическое формирование меню Отправлено: radislav72 от Июль 10, 2014, 13:05 Спасибо, то что надо!
Название: Re: Динамическое формирование меню Отправлено: vulko от Июль 18, 2014, 13:24 Имхо это все какие-то шаманства.
contextMenuEvent может и неплох, но вот например в qgraphicsscene с виджетами это не работает как надо. использовать aboutToShow ивент тоже имхо не комильфо, стороннему программисту логика будет непонятна. для себя динамическую генерацию контекстных меню решил так: для каждого конкретного объекта (виджета и т.п.) обработчик mouseReleaseEvent создает нужное контекстное меню и вызывает метод exec() для него. имхо это куда логичнее чем создавать пустое меню, а потом, где-то в aboutToShow добавлять в него контент. |