在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中有CFBundleName
和CFBundleDisplayName
條目。我錯過了什麼?
可能是Qt中的一個bug。你可以檢查它是否已經在[bugtracker](https://bugreports.qt-project.org/)中,如果沒有,寫一個最小的測試用例並打開一個? – peppe