在 Qt 4.8 我有这个代码:
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 自动将 About Qt 菜单项移动到 OS X 10.8(可能还有其他版本)下的应用程序菜单。
现在使用 Qt 5.1,我的 About Qt 项目最终出现在 Help 菜单中,我必须手动设置 MenuRole 以恢复旧行为:
about_qt_action->setMenuRole(QAction::AboutQtRole);
但是,文档说:
默认情况下,所有操作都有 TextHeuristicRole,这意味着操作是根据其文本添加的(有关更多信息,请参阅 QMenuBar)。
和:
Qt for Mac OS X 还提供了菜单栏合并功能,以使 QMenuBar 更接近于接受的 Mac OS X 菜单栏布局。合并功能基于匹配 QMenu 条目标题的字符串。这些字符串在“QMenuBar”上下文中被翻译(使用QObject::tr())。如果一个条目被移动,它的插槽仍然会触发,就好像它在原来的位置一样。下表概述了查找的字符串以及匹配项的放置位置:
...并且表格显示about.*
移动到应用程序菜单的菜单。我的应用程序名为 Yua,除非我手动设置 MenuRole,否则以相同方式制作的“关于 Yua”QAction 也不会移动。我的 Info.plist 中有一个CFBundleName
和CFBundleDisplayName
条目。我错过了什么?