2017-07-03 63 views
2

我有一个在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。

任何帮助表示赞赏。

回答

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); 
+0

请将您的答案标记为已接受。 (是的,你可以为你自己的答案做这件事。)这让其他人清楚你的问题已经被处理:-) –

1

我有同样的问题,并发现它发生的原因是我没有使用native menu bar。在我主窗口构造我定义的:

ui->menuBar->setNativeMenuBar(false); 

而且有些动作快捷键(例如Command+SCommand+O)不工作OSX。所以,我刚刚删除了该行,现在快捷键工作正常。

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

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

+1

不是问题的答案,但它使我的答案。谢谢。 – SteveB

相关问题