C++ 为什么我必须在Qt5.1中手动指定QAction::MenuRole?

C++ 为什么我必须在Qt5.1中手动指定QAction::MenuRole?,c++,macos,qt,qt5,C++,Macos,Qt,Qt5,在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(tr

在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项出现在帮助菜单中,我必须手动设置菜单以恢复旧的行为:

    about_qt_action->setMenuRole(QAction::AboutQtRole);
然而,他说:

默认情况下,所有操作都具有TextHeuristicRole,这意味着该操作是基于其文本添加的(有关更多信息,请参阅QMenuBar)

以及:

Qt for Mac OS X还提供了一个菜单栏合并功能,使QMenuBar更符合公认的Mac OS X菜单栏布局。合并功能基于与QMenu条目标题匹配的字符串。这些字符串在“QMenuBar”上下文中被翻译(使用QObject::tr()。如果一个条目被移动,它的插槽仍然会像在原来的位置一样开火。下表列出了所查找的字符串以及匹配项的位置:


。。。并显示移动到应用程序菜单的菜单的
about.*
。我的应用程序名为Yua,除非手动设置菜单项,否则以相同方式进行的“关于Yua”QAction也不会移动。my Info.plist中既有
CbundLename
条目,也有
CbundleDisplayName
条目。我缺少什么?

我永远不会依赖启发式角色。它们是一个考虑不周的特征。您应该在所有具有非默认角色的菜单操作上手动设置菜单角色。这就是它的全部。

可能是Qt中的一个bug。你能检查一下它是否已经在测试中,如果没有,写一个最小的测试用例并打开一个吗?