【问题标题】:Custom Non Alt Shortcuts for QMenuQMenu 的自定义非 Alt 快捷方式
【发布时间】:2017-05-12 03:33:14
【问题描述】:

我有一个带有一些 QMenu 的 QMenuBar。例如,

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

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    很遗憾,无法通过 API 按菜单名称轻松选择操作。因此,您必须手动执行此操作。

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

    ,然后让这个函数本身被键盘事件处理程序调用。

    但是,如果你有一个指向所需菜单的指针,你可以调用menuAction(),这会变得简单得多。

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

    希望这可以避免其他人像我一样在未来寻找疯狂的时间。

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2022-06-24
      • 2016-12-30
      相关资源
      最近更新 更多