我有一个QMenuBar和一些QMenus。例如,
QMenu* menu = myMainWindow->menubar()->addMenu(tr("Settings"));
现在,我知道如果我添加&符号,说“& Settings”,我可以使用alt + S打开此菜单。但是,我的应用程序需要使用自定义键。而且,在我的应用程序中,我们甚至没有“alt”键。无论如何,例如自定义密钥,我们在Qt :: Key(特别是被认为是未知密钥)中使用未使用的位置,并将它们用于事件。这通常很好。事实上,这样的事情通常有效:
int val = keyEvent->key();
if (key == MyCustomKeyEnum::CustomKey)
// do stuff
但是,如何设置菜单以使用自定义int键快捷键?或者,等效地,我如何以编程方式从菜单栏打开菜单?我可以简单地将MyCustomKeyEnum :: CustomKey中的事件连接到自定义插槽。那么,也许我可以首先避免使用快捷键自定义键?
我尝试使用targetMenu.exec(),但是因为我希望能够使用箭头键导航到相邻菜单,并且菜单产生在正确的位置,这不是一个好选择。
答案 0 :(得分:0)
仔细梳理文档后,我在QMenuBar - setActiveAction中找到了正确的函数。
不幸的是,没有办法通过菜单名称通过API轻松选择您的操作。所以,你必须手动完成。
for (QAction* act : menuBar()->actions())
{
if (act->text() == tr("Settings"))
{
menuBar()->setActiveAction(act);
}
}
,然后让键盘事件处理程序调用此函数。
但是,如果您有指向所需菜单的指针,则可以调用menuAction(),这会变得更加简单。
menuBar()->setActiveAction(mySettingsMenu->menuAction());
希望这可以节省其他人在将来搜索疯狂的时间,比如我自己。