在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菜单项移动到OSX10.8下的应用程序菜单(可能还有其他版本)。
现在,使用Qt5.1,我的关于Qt的条目最终出现在“帮助”菜单中,我必须手动设置MenuRole以返回旧的行为:
about_qt_action->setMenuRole(QAction::AboutQtRole);然而,文献资料说:
默认情况下,所有操作都有TextHeuristicRole,这意味着操作是根据其文本添加的(有关更多信息,请参见QMenuBar )。
和:
还提供了一个菜单栏合并功能,使QMenuBar更加符合公认的Mac菜单栏布局。合并功能基于与QMenu条目标题匹配的字符串。这些字符串在"QMenuBar“上下文中被翻译(使用QObject::tr())。如果一个条目被移动,它的插槽仍然会被触发,就像它在原来的位置一样。下表概述了查找的字符串以及如果匹配的话条目放置的位置:
..。这张桌子显示移动到应用程序菜单的菜单的about.*。我的应用程序名为Yua,以相同方式制作的“关于Yua”的QAction也不会移动,除非我手动设置MenuRole。在我的CFBundleName中有一个CFBundleDisplayName和一个Info.plist条目。我遗漏了什么?
发布于 2013-09-03 20:58:46
我根本就不依赖于启发式角色。他们是IMHO的一个相当拙劣的特点。您应该手动设置所有具有非默认角色的菜单操作的菜单角色。非那样做不行。
https://stackoverflow.com/questions/18414227
复制相似问题