在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项目最终会出现在“帮助”菜单中,我必须手动设置MenuRole才能恢复原来的行为:
about_qt_action->setMenuRole(QAction::AboutQtRole);
但是,the documentation说:
默认情况下,所有操作都有TextHeuristicRole,这意味着根据文本添加操作(有关详细信息,请参阅QMenuBar)。
和
Qt for Mac OS X还提供菜单栏合并功能,使QMenuBar更接近Mac OS X菜单栏布局。合并功能基于匹配QMenu条目标题的字符串。这些字符串在“QMenuBar”上下文中被翻译(使用QObject :: tr())。如果移动一个条目,它的插槽仍然会像在原始位置一样触发。下表概述了所查找的字符串以及匹配时条目的放置位置:
...和the table显示移动到应用程序菜单的菜单about.*
。我的应用程序名为Yua,除非我手动设置MenuRole,否则也不会移动以相同方式制作的“关于Yua”QAction。我的Info.plist中有一个CFBundleName
和CFBundleDisplayName
条目。我错过了什么?
答案 0 :(得分:0)
我根本不会依赖启发式角色。恕我直言,他们是一个相当不合理的功能。您应该在具有非默认角色的所有菜单操作上手动设置菜单角色。这就是它的全部内容。