Qt菜单快捷方式不能在OS X上工作
我有一个在Debian Linux上开发的Qt 5应用程序,现在我正在移植它并为OS X增强它。当我将它带过来时,所有菜单快捷方式都存在在表单编辑器中。视觉捷径已经改变,以反映使用命令键而不是控制键。所以,对于登录行动UI文件看起来像这样:Qt菜单快捷方式不能在OS X上工作
<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。
任何帮助表示赞赏。
问题在于使用了非本机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);
我有同样的问题,并发现它发生的原因是我没有使用native menu bar。在我主窗口构造我定义的:
ui->menuBar->setNativeMenuBar(false);
而且有些动作快捷键(例如Command+S
和Command+O
)不工作OSX。所以,我刚刚删除了该行,现在快捷键工作正常。
我找不到这个问题的原因,但它似乎与OSX快捷方式有关。
无论如何,我希望这个答案可能对您或其他面临同样问题的人有帮助。
不是问题的答案,但它使我的答案。谢谢。 – SteveB
请将您的答案标记为已接受。 (是的,你可以为你自己的答案做这件事。)这让其他人清楚你的问题已经被处理:-) –