2013-08-24 96 views
1

在Qt 4.8我有這樣的代碼:爲什麼我必須在Qt 5.1中手動指定QAction :: MenuRole?

QMenuBar *menu_bar = menuBar(); //of my QMainWindow 
    QMenu *help_menu = menu_bar->addMenu(tr("&Help")); 
    QAction *about_qt_action = help_menu->addAction(tr("About &Qt")); 
    connect(about_qt_action, SIGNAL(triggered()), qApp, SLOT(aboutQt())); 

僅此一點就足以Qt的自動移動關於Qt的菜單項到應用菜單下的OS X 10.8(也許其他版本太)。

現在使用Qt 5.1我的關於Qt項目在幫助菜單中結束了,我必須手動設置MenuRole找回舊的行爲:

about_qt_action->setMenuRole(QAction::AboutQtRole); 

然而,the documentation說:

默認情況下,所有操作都具有TextHeuristicRole,這意味着該操作是基於其文本添加的(有關更多信息,請參閱QMenuBar)。

和:

的Qt適用於Mac OS X還提供了一個菜單欄合併功能,使QMenuBar更加符合公認的Mac OS X的菜單欄佈局。合併功能基於匹配QMenu條目標題的字符串。這些字符串在「QMenuBar」上下文中被翻譯(使用QObject :: tr())。如果一個條目被移動,它的插槽仍然會像原來的位置一樣被觸發。下表列出了字符串尋找和其中,如果匹配條目放置:

...和the table顯示about.*對於移動應用菜單的菜單。我的應用程序被命名爲Yua,除非手動設置MenuRole,否則以相同方式創建的「關於Yua」QAction也不會移動。我的Info.plist中有CFBundleNameCFBundleDisplayName條目。我錯過了什麼?

+0

可能是Qt中的一個bug。你可以檢查它是否已經在[bugtracker](https://bugreports.qt-project.org/)中,如果沒有,寫一個最小的測試用例並打開一個? – peppe

回答

0

我根本就不會依賴啓發式角色。他們是恕我直言,一個相當不良的特點。您應該在具有非默認角色的所有菜單操作中手動設置菜單角色。這裏的所有都是它的。

相關問題