在 Qt 中自定义 AppMenu

Posted

技术标签:

【中文标题】在 Qt 中自定义 AppMenu【英文标题】:Customize AppMenu in Qt 【发布时间】:2019-02-28 19:55:48 【问题描述】:

我正在为 MacOS 开发 Qt 应用程序。

如何向 menuApp 添加项目?我的意思是出现在 Apple 图标右侧的菜单栏上的条目

我想知道如何在 Qt 中实现这一点,请不要在 Objective-c 中实现

我使用的是 Qt 5.9。它是 QWidget 应用程序

编辑:这是macos问题,如果你不知道menuApp是什么,可能你无法回答这个问题。它是Apple默认放置在每个应用程序中的菜单。在所附图片中,它对应于菜单条目“Finder”

提前致谢

【问题讨论】:

您是否阅读过doc.qt.io/qt-5/qmainwindow.html 导致您转到doc.qt.io/qt-5/qmenubar.html 等的内容? Qt 具有出色的文档和许多示例,您可以查看。 看起来这个问题会给你提供一个你现在拥有的截图,然后描述你想要什么。如果不出意外,它会帮助非 OSX Qt 开发人员知道你在说什么......如果有任何甚至远程相关的东西你可以显示,一些代码也会很好。 另外,可能相关且重要,这是什么类型的应用程序? Qt Quick 还是 QWidgets?如果 QWidgets、QMainWindow 或只是 QWidget 作为主窗口?如果是 Qt Quick,QGuiApplication 还是 QApplication?所以在第 2 次,你真的应该提供一个 MCVE(如果是 Qt Quick 的话,只需要最小的 main.cpp 和可能的 .qml 文件)。好的 MCVE 将是您使用 Qt Creator 创建正确类型的项目时生成的文件。 不一定是您需要的,但设置 MenuRole 可能会对您有所帮助。对您希望出现在该菜单中的操作使用QAction::ApplicationSpecificRole(或更具体的角色) 【参考方案1】:

根据QT docs for menu role,简短的回答是:将QMenu 项QActionmenuRole 设置为文档中列出的预定义角色,或通用QAction::TextHeuristicRole。有些角色是根据菜单文本自动分配的,否则您必须自己做。

您可以通过编程方式或使用 ui 编辑器来执行此操作。这是来自 QT Creator 中的 ui 编辑器的一些图像,正在编辑我的 mainwindow.ui 文件。我有一些通用的“常规”QMenu,它不应该是可见的,QAction 元素是About,它会自动提取并放在 menuApp 下,因为它的名称与预定义的角色匹配。对于不匹配预定义角色的“检查更新”QAction,我手动将其属性menuRole 设置为ApplicationSpecificRole,使其也放在 menuApp 下:

mainwindow.ui menu bar showing entries in QT Creator

mainwindow.ui menu role selection in QT Creator

resulting app menu, where about menu was auto attributed and check for updates was manually configured

【讨论】:

我尝试了一个答案,旨在以更直观的方式解释文档所说的内容,因为我在开始时遇到了同样的问题。因为我没有理解所有内容的上下文,所以我认为这样的答案会有所帮助。我希望它可以帮助别人!

以上是关于在 Qt 中自定义 AppMenu的主要内容,如果未能解决你的问题,请参考以下文章

Qt 中自定义小部件的自定义样式

Qt中自定义类的方法

如何在 Flutter 桌面自定义 AppMenu(MenuBar)?

QT for symbian 中自定义菜单怎么实现?

Qt MainWindow中自定义函数调用MainWindow中方法

Android Studio中自定义标题栏的添加问题