为什么我必须在Qt 5.1中手动指定QAction :: MenuRole?

时间:2013-08-24 02:11:10

标签: 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(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中有一个CFBundleNameCFBundleDisplayName条目。我错过了什么?

1 个答案:

答案 0 :(得分:0)

我根本不会依赖启发式角色。恕我直言,他们是一个相当不合理的功能。您应该在具有非默认角色的所有菜单操作上手动设置菜单角色。这就是它的全部内容。