Russian Qt Forum
Май 07, 2024, 06:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамическое формирование меню  (Прочитано 4576 раз)
radislav72
Гость
« : Июль 06, 2014, 11:38 »

Здравствуйте!

Как лучше сделать, чтоб перед отображение меню QMenu можно было его формировать по-разному, в зависимости от некоторых условий? Т.е. как отловить и где момент отображения меню?
Записан
Bepec
Гость
« Ответ #1 : Июль 06, 2014, 11:45 »

Вы сами его вызываете, вот в том месте и меняйте.
Для виджета это contextMenuEvent к примеру.
Записан
radislav72
Гость
« Ответ #2 : Июль 06, 2014, 11:53 »

Не, я его привязал к кнопке и меню появляется при ее нажатии автоматически:

Код:
QMenu* mnOperations = new QMenu(this);
    mnOperations->addAction(QIcon(":/images/table_run.png"), tr("Change currency: total"), this, SLOT(operTransDebtAll()), QKeySequence("Alt+G"));
    mnOperations->addAction(QIcon(":/images/table_run.png"), tr("Change currency: base summ"), this, SLOT(operTransDebtBase()), QKeySequence("Alt+1"));
    mnOperations->addAction(QIcon(":/images/table_run.png"), tr("Change currency: percents"), this, SLOT(operTransDebtPercent()), QKeySequence("Alt+2"));
    ...
    ui->btnOperations->setMenu(mnOperations);
    ui->btnOperations->setPopupMode(QToolButton::InstantPopup);
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июль 06, 2014, 12:16 »

Отлавливайте сигнал void QMenu::aboutToShow () и в слоте, делайте с меню что захотите Улыбающийся
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июль 06, 2014, 12:46 »

Отлавливайте сигнал void QMenu::aboutToShow () и в слоте, делайте с меню что захотите Улыбающийся
А как быть с горячими/холодными клавишами, напр Ctrl+O ?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июль 06, 2014, 12:59 »

Отлавливайте сигнал void QMenu::aboutToShow () и в слоте, делайте с меню что захотите Улыбающийся
А как быть с горячими/холодными клавишами, напр Ctrl+O ?
хз Улыбающийся

Цитировать
Как лучше сделать, чтоб перед отображение меню QMenu можно было его формировать по-разному, в зависимости от некоторых условий? Т.е. как отловить и где момент отображения меню?
Такой был вопрос автора, и я на него ответил Веселый
Записан

radislav72
Гость
« Ответ #6 : Июль 10, 2014, 13:05 »

Спасибо, то что надо!
Записан
vulko
Гость
« Ответ #7 : Июль 18, 2014, 13:24 »

Имхо это все какие-то шаманства.

contextMenuEvent может и неплох, но вот например в qgraphicsscene с виджетами это не работает как надо.
использовать aboutToShow ивент тоже имхо не комильфо, стороннему программисту логика будет непонятна.

для себя динамическую генерацию контекстных меню решил так:
для каждого конкретного объекта (виджета и т.п.) обработчик mouseReleaseEvent создает нужное контекстное меню и вызывает метод exec() для него.

имхо это куда логичнее чем создавать пустое меню, а потом, где-то в aboutToShow добавлять в него контент.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.