【问题标题】:Qt Menu Shortcuts not working on OS XQt 菜单快捷方式在 OS X 上不起作用
【发布时间】:2017-12-07 00:49:39
【问题描述】:

我有一个在 Debian Linux 上开发的 Qt 5 应用程序,现在我正在移植它并为 OS X 增强它。当我把它带过来时,所有的菜单快捷方式都出现在表单编辑器中。视觉快捷方式已更改以反映使用命令键而不是控制键。因此,登录操作的 ui 文件如下所示:

<action name="LoginAction">
 <property name="text">
  <string>Log in...</string>
 </property>
 <property name="shortcut">
  <string>Ctrl+L</string>
 </property>
</action>

但是,现在唯一可以使用的键盘快捷键是 OS X 使用的默认快捷键,例如命令-Q。

我在 Qt 论坛上看到讨论表明它与 Qt 5 将快捷方式移交给 Cocoa 有关。这篇 Keyboard shortcuts - function keys - created in Qt app don't work on OSX 的帖子提出了一个我合并的解决方法,

#if defined (Q_OS_MACX)
    ui->LoginAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L));
    ui->LoginAction->setShortcutContext(Qt::ApplicationShortcut);
#endif

但快捷方式仍然不起作用。 Command-L 不会触发 LoginAction。

感谢任何帮助。

【问题讨论】:

    标签: c++ macos qt cocoa qt5


    【解决方案1】:

    我遇到了同样的问题并发现它正在发生,因为我没有使用native menu bar。在我的 MainWindow 构造函数中,我定义了这个:

    ui->menuBar->setNativeMenuBar(false);
    

    一些操作快捷方式(例如Command+SCommand+O)在OSX 上不起作用。因此,我刚刚删除了该行,并且快捷方式现在可以正常工作了。

    我找不到这个问题的原因,但它似乎与 OSX 快捷方式有关。

    无论如何,我希望这个答案可能对您或其他面临相同问题的人有所帮助。

    【讨论】:

    • 不是答案,但它让我找到了答案。谢谢。
    【解决方案2】:

    问题在于使用非 OS X 原生菜单。来自非原生菜单操作的快捷方式似乎不会触发任何内容。在 UI 设计器视图中,您需要在顶级菜单属性中选中原生菜单框,并且您需要将快捷方式设置为应用程序级别的快捷方式。 QAction 属性上有一个复选框。

    您也可以像这样以编程方式进行:

    QAction *myAction = new QAction("My action");
    myAction->setShortcut(QKeySequence("CTRL+M"));
    myAction->setShortcutContext(Qt::ApplicationShortcut);
    
    QMenu *myMenu = new QMenu("My Menu");
    myMenu->addAction(myAction);
    ui->menuBar->addMenu(myMenu);
    
    ui->menuBar->setNativeMenuBar(true);
    

    【讨论】:

    • 请将您的答案标记为已接受。 (是的,您可以为自己的答案这样做。)这让其他人清楚您的问题已得到处理:-)
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多