QMenu的自定义非Alt快捷方式

时间:2017-05-10 19:59:13

标签: c++ qt

我有一个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(),但是因为我希望能够使用箭头键导航到相邻菜单,并且菜单产生在正确的位置,这不是一个好选择。

1 个答案:

答案 0 :(得分:0)

仔细梳理文档后,我在QMenuBar - setActiveAction中找到了正确的函数。

不幸的是,没有办法通过菜单名称通过API轻松选择您的操作。所以,你必须手动完成。

for (QAction* act : menuBar()->actions())
{
    if (act->text() == tr("Settings"))
    {
        menuBar()->setActiveAction(act);
    }
}

,然后让键盘事件处理程序调用此函数。

但是,如果您有指向所需菜单的指针,则可以调用menuAction(),这会变得更加简单。

menuBar()->setActiveAction(mySettingsMenu->menuAction());

希望这可以节省其他人在将来搜索疯狂的时间,比如我自己。