为什么我必须在Qt 5.1中手动指定QAction::MenuRole
Why do I have to manually specify the QAction::MenuRole in Qt 5.1?
在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自动将"关于Qt"菜单项移动到OS X 10.8下的应用程序菜单中(可能还有其他版本)。
现在有了Qt 5.1,我的"关于Qt"项目最终出现在"帮助"菜单中,我必须手动设置MenuRole才能恢复原来的行为:
about_qt_action->setMenuRole(QAction::AboutQtRole);
然而,文件显示:
默认情况下,所有操作都具有TextHeuristicRole,这意味着操作是根据其文本添加的(有关更多信息,请参阅QMenuBar)。
和:
Qt for Mac OS X还提供了菜单栏合并功能,使QMenuBar更符合公认的Mac OS X菜单栏布局。合并功能基于与QMenu条目标题匹配的字符串。这些字符串在"QMenuBar"上下文中进行翻译(使用QObject::tr())。如果一个入口被移动,其插槽仍将像在原来的位置一样启动。下表列出了要查找的字符串以及匹配项的放置位置:
并且该表示出了移动到应用菜单的菜单的CCD_ 1。我的应用程序名为Yua,除非我手动设置MenuRole,否则以相同方式生成的"About Yua"QAction也不会移动。在我的Info.plist中有一个CFBundleName
和CFBundleDisplayName
条目。我缺少什么?
我根本不会依赖启发式角色。他们是IMHO,这是一个考虑不周的特点。您应该在所有具有非默认角色的菜单操作上手动设置菜单角色。这就是它的全部。
相关文章:
- 触发时无法将 QAction 链接到函数 (Qt 5)
- 将 QAction 的 QString 文本作为参数传递
- 如何将Qmenu中的QACTION转换为Qwidget
- 执行QACTION之后如何设置焦点
- Qt:使禁用的 QAction 可选,以便用户可以将其切换回启用状态
- QACTION信号插槽中的无形UI
- 如何获取禁用的QAction元素的触发信号
- 防止 QMenu 在未触发其 QAction 之一时关闭
- TriState QAction in QMenu
- QACTION快捷方式无法将空间设置为热键
- 确定 QAction 的触发器
- 更改 QMenu 内部的 QAction 中的文本
- 使用QACTION和SATESOLTIP()时QT本地化问题
- Qt5 C++将触发的 QAction 连接到成员函数
- 编译时得到错误:找不到'QtGui/QAction'文件 #include < QtGui/QAction>
- 使用快捷方式创建QACTION,而无需插入菜单
- 错误:QACTION ::触发受到保护 - 无法连接信号
- QMenu:为特定 QAction 设置文本颜色
- 将图标添加到工具栏中的 QAction
- 为什么我必须在Qt 5.1中手动指定QAction::MenuRole