Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ¤Se®ega¤ от Март 12, 2009, 16:32



Название: shortCut
Отправлено: ¤Se®ega¤ от Март 12, 2009, 16:32
Помогите с быстрыми клавишами.На виджете есть 2 менюшки (одна в MenuBar,другая контекстная).В обоих заданы shortcutы но почему-то работают только те, что связаны с MenuBar.Как мне сделать чтобы при нажатии "быстрых клавиш" из контекстного меню происходили действия? ???


Название: Re: shortCut
Отправлено: xintrea от Март 12, 2009, 17:51
Да, действительно.

Если я правильно понимаю, ты делаешь контекстное меню через Action. То есть, вначале создаешь пункты меню в виде объектов QAction (пусть они даже создаются в конструкторе твоего виджета), а затем в методе типа on_customContextMenuRequested() из этих Action ты конструируешь меню (как это сделано в примерах), примерно так

Код
C++ (Qt)
void mywidget::on_customContextMenuRequested(const QPoint &pos)
{
 // Конструирование меню
 QMenu menu(this);
 menu.addAction(action_1);
 menu.addAction(action_2);
 menu.addAction(action_3);
 
 // Включение отображения меню на экране
 menu.exec(recordview->viewport()->mapToGlobal(pos));
}

И несмотря на то, что Action описаны в конструкторе виджета, и им назначены шорткаты, шорткаты эти не работают. Это происходит видимо потому, что Action существуют в виджете просто как объекты, но объекты эти никуда не вставлены (т.к. addAction() вызывается только при открытии контекстного меню).


Но я попробовал сделать контекстное меню сразу в конструкторе, то есть оно в виджете существует все время, только скрыто. Получается, что Action уже вставлены в меню, но это тоже не помогает. Тут видимо уже играет роль то, что меню скрыто, а для скрытого меню шорткаты недоступны.


Дальше мои мысли кончаются, и я тоже хочу узнать у гуру, можно ли вызывать шорткаты для Action, которые принадлежат контекстному меню.


Название: Re: shortCut
Отправлено: ¤Se®ega¤ от Март 12, 2009, 18:06
Да, именно так все у меня и устроено.Думаю на крайний случай можно создать в menuBare еще одно меню, сделать его невидимым и его вызывать привязать к конекстному(не пробовал, но думаю возможно).Заморорчено конечно, хотелось бы попроще. :-\


Название: Re: shortCut
Отправлено: Пантер от Март 12, 2009, 18:08
this->addAction(QAction*)


Название: Re: shortCut
Отправлено: xintrea от Март 12, 2009, 18:14
this->addAction(QAction*)

То есть, решение в том, что одну и ту же Action надо вставить и в контекстное меню, и назначить всему виджету?


Название: Re: shortCut
Отправлено: ¤Se®ega¤ от Март 12, 2009, 18:19
Спасибо.Заработало  :D.Хотелось бы еще знать почему такое происходит.


Название: Re: shortCut
Отправлено: ¤Se®ega¤ от Март 12, 2009, 18:25
ну получается что у вджета есть Действия, из которых мы делаем контекстное меню, и при нажатии "быстрых клавиш" срабатывают действия виджета.я так понимаю.