如何为整个 Qt 应用程序创建一个菜单?

Posted

技术标签:

【中文标题】如何为整个 Qt 应用程序创建一个菜单?【英文标题】:How do I create one menu for an entire Qt application? 【发布时间】:2015-06-08 13:37:55 【问题描述】:

我的应用程序可以启动多个QMainWindow 实例,并且我希望每个实例都有相同的菜单。如果没有初始化实例但应用程序仍在运行(可能在 Mac OS X 上),我仍然希望显示相同的菜单但禁用一些项目。

我该怎么做呢?将QMenuQMenuBar 子类化,将子类转换为单例,并将其传递给每个QMainWindow 是否可行?

【问题讨论】:

您不想要 MDI 应用程序吗? 是的,但我也希望能够在QMainWindow 之外使用我的QMainWindow 菜单中的相同菜单项。例如,如果我有一个“新建...”菜单项,它在按下时会创建一个 QMainWindow 的新实例,我希望能够从 QMainWindow 菜单和全局 Mac OS X 中创建新实例QMainWindow 尚未实例化但应用程序仍在运行时的菜单。 我认为这需要一个带有单例模式的QMenu 子类。我试图避免有两个单独的菜单(QMainWindow 菜单和一个应用程序在没有活动QMainWindow 时默认使用的菜单)。如果两个菜单中的项目具有完全相同的功能,则两个单独的菜单将需要有重复的代码。 【参考方案1】:

QMenu 遵循 Qt 的所有权概念,每个菜单或操作只能由一个父级拥有。有办法克服这个问题,但这不是正确的做法。在这种情况下,子类化不会有太大变化,尤其是 ownage 模型。

我建议您创建一个菜单工厂,为每个窗口创建单独的菜单和操作(对于无窗口情况,一个)并将每个操作连接到相应的插槽(在窗口类中或在某些全局类中用于全局操作)。

【讨论】:

以上是关于如何为整个 Qt 应用程序创建一个菜单?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QMacStyle 获取整个 Qt StyleSheet

如何为整个应用程序创建字体大小选项(小、正常、大)? [复制]

我如何为 Android 和 QT 创建者使用 RTL SDR 库?

如何为 Android 电视应用程序及其侦听器创建导航菜单抽屉

在 Mac 上,如何为 python 脚本创建一个拖放应用程序,其中脚本名称而不是 Python 显示在菜单栏(等)中?

如何为整个目录创建补丁来更新它?