2017-07-03 97 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

相關問題