如何为整个 Qt 应用程序创建一个菜单?
Posted
技术标签:
【中文标题】如何为整个 Qt 应用程序创建一个菜单?【英文标题】:How do I create one menu for an entire Qt application? 【发布时间】:2015-06-08 13:37:55 【问题描述】:我的应用程序可以启动多个QMainWindow
实例,并且我希望每个实例都有相同的菜单。如果没有初始化实例但应用程序仍在运行(可能在 Mac OS X 上),我仍然希望显示相同的菜单但禁用一些项目。
我该怎么做呢?将QMenu
或QMenuBar
子类化,将子类转换为单例,并将其传递给每个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 显示在菜单栏(等)中?