我有一个在Debian Linux上开发的Qt 5应用程序,现在我正在移植它并为OS X增强它。当我把它带过来时,所有的菜单快捷方式都出现在表单编辑器中。视觉快捷方式已更改为反映命令键的使用而不是控制键。因此,Login操作的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。
感谢任何帮助。
答案 0 :(得分:1)
我遇到了同样的问题,发现它发生了,因为我没有使用native menu bar。在我的 MainWindow 构造函数中,我定义了这个:
ui->menuBar->setNativeMenuBar(false);
某些操作快捷方式(例如Command+S
和Command+O
)无效 OSX 。所以,我刚删除了该行,快捷方式现在正常工作。
我找不到此问题的原因,但似乎与 OSX 快捷方式有关。
无论如何,我希望这个答案对你或其他面临同样问题的人有所帮助。
答案 1 :(得分:1)
问题在于使用非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);