class QMenuBar#

QMenuBar 类提供水平菜单栏。更多

Inheritance diagram of PySide6.QtWidgets.QMenuBar

概要#

属性#

  • defaultUpᅟ - 弹出方向的默认选项

  • nativeMenuBarᅟ - 是否在支持此功能的平台上使用菜单栏作为原生态菜单栏

方法#

虚拟方法#

信号#

注意

此文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您在翻译中发现问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告诉我们。

详细描述#

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

菜单栏由一系列下拉菜单项组成。您可以使用addMenu()方法添加菜单项。例如,假设menubar是指向一个QMenuBar的指针,fileMenu是指向一个QMenu的指针,则以下语句将菜单插入到菜单栏中:

menubar.addMenu(fileMenu)

菜单项文本中的叹号将Alt+F设置为此菜单的快捷键。(您可以通过“&&”在菜单栏中获取真正的叹号。)

不需要布局菜单栏。它将自动将自身的几何形状设置为父小部件的顶部,并根据父小部件的尺寸变化适当调整。

用法#

在大多数主窗口风格的程序中,您会在 menuBar() 函数中使用,该函数在 QMainWindow 中提供,向菜单栏添加 QMenu ,并将 QActions 添加到弹出菜单中。

示例(来自 菜单 示例)

fileMenu = menuBar().addMenu(tr("File"))
fileMenu.addAction(newAct)

可以使用 removeAction() 移除菜单项。

可以通过使用 QWidgetAction 类的实例来将小部件添加到菜单中。然后可以通过通常的方式将这些操作插入到菜单中;有关更多详细信息,请参阅 QMenu 文档。

平台依赖的样式和感觉#

不同的平台对菜单栏的外观及其与用户交互时的行为有不同的需求。例如,Windows系统通常配置为仅在按下Alt键时才显示菜单栏中项的键盘快捷键的带下划线的字符。

QMenuBar 作为全局菜单栏#

在macOS上以及某些Linux桌面环境(如Ubuntu Unity)中,QMenuBar 是用于使用系统级菜单栏的封装器。如果您在单个对话框中有多达两个菜单栏,则最外层的菜单栏(通常是具有 widget 标志 Qt::Window 的 widget 中)将被用于系统级菜单栏。

Qt for macOS还提供了一种将菜单栏合并的功能,以便 QMenuBar 更符合苹果公司接受的菜单栏布局。如果条目被移动,它的槽位仍然像它位于原始位置一样触发。

合并功能基于菜单条目中 QAction::menuRole()。如果项具有 QAction::TextHeuristicRole,则通过以下启发式方法使用字符串匹配确定角色:

字符串匹配

放置

注释

关于.*

应用程序菜单 | 关于 <应用程序名称>

应用程序名称从 Info.plist 文件中获取(见下文注释)。如果找不到此条目,则不会在应用程序菜单中显示“关于”项。

配置、选项、设置、设置或首选项

应用程序菜单 | 首选项

如果找不到此条目,则将禁用设置项。

退出或退出

应用程序菜单 | 退出 <应用程序名称>

如果找不到此条目,将创建一个默认的退出项以调用 QCoreApplication::quit()。

您可以通过设置 QAction::menuRole() 属性为 QAction::NoRole 来覆盖此行为。

如果您想在 Mac 应用程序中的所有窗口共享一个菜单栏,您必须创建一个没有父级的菜单栏。这样创建一个没有父级的菜单栏:

menuBar = QMenuBar(None)

注意

请勿调用 不要 menuBar() 来创建共享菜单栏,因为该菜单栏将以 QMainWindow 作为其父级。这个菜单栏将只会显示在父级 QMainWindow 上。

注意

macOS 菜单栏中用于应用程序名称的文本是从应用程序包中的 Info.plist 文件中设置的值获取的。有关更多信息,请参阅 Qt for macOS - Deployment。

注意

在 Linux 上,如果 D-Bus 会话总线上有可供使用的 com.canonical.AppMenu.Registrar 服务,则 Qt 将与其通信,按照所述将应用程序菜单安装到全局菜单栏中。

示例

菜单示例 显示了如何使用 QMenuBarQMenu。其他 主窗口应用程序示例 也使用这些类提供了菜单。

注意

当使用 from __feature__ import true_property 时,可以直接使用属性,否则可通过访问器函数使用。

属性 defaultUpᅟ: bool#

此属性保存弹出方向。

默认的弹出方向。默认情况下,菜单在屏幕“向下”弹出。将属性设置为 true,菜单将向上弹出。您可能希望对此类位于所引用文档“下面”的菜单调用此属性。

如果菜单无法适应屏幕,则自动使用其他方向。

访问函数
属性 nativeMenuBarᅟ: bool#

此属性保存菜单栏是否用作支持的平台上的本地菜单栏。

此属性指定是否应将菜单栏用作支持的平台上的原生菜单栏。当前支持的平台包括 macOS 和使用 com.canonical.dbusmenu D-Bus 接口的 Linux 桌面(例如 Ubuntu Unity)。如果此属性值为 true,则菜单栏用于原生菜单栏,不在其父窗口中;如果值为 false,则菜单栏保留在窗口中。在其他平台,设置此属性没有效果,读取此属性将始终返回 false

默认情况下,是否遵循 Qt::AA_DontUseNativeMenuBar 属性对应用程序的设置。显式设置此属性将覆盖属性的存在(或不存在)。

访问函数
__init__([parent=None])#
参数:

parentQWidget

通过父对象 parent 构造菜单栏。

actionAt(arg__1)#
参数:

arg__1QPoint

返回类型:

QAction

pt 处返回 QAction。如果没有在 pt 处找到动作或位置有分隔符,则返回 None

actionGeometry(arg__1)#
参数:

arg__1QAction

返回类型:

QRect

以 QRect 形式返回动作 act 的几何形状。

另请参阅

actionAt()

activeAction()#
返回类型:

QAction

如果当前有任何高亮的 QAction,则返回该 QAction;否则返回 None

另请参阅

setActiveAction()

addMenu(menu)#
参数:

menuQMenu

返回类型:

QAction

menu 添加到菜单栏。返回菜单的 menuAction()。菜单栏不拥有该菜单。

注意

返回的 QAction 对象可以用来隐藏对应的菜单。

另请参阅

addAction() menuAction()

addMenu(icon, title)
参数:
  • iconQIcon

  • title – 字符串

返回类型:

QMenu

将带有 icontitle 的新 QMenu 添加到菜单栏。菜单栏将拥有该菜单。返回新的菜单。

另请参阅

addAction() menuAction()

addMenu(title)
参数:

title – 字符串

返回类型:

QMenu

将带有 title 的新 QMenu 添加到菜单栏。菜单栏将拥有该菜单。返回新的菜单。

另请参阅

addAction() menuAction()

addSeparator()#
返回类型:

QAction

将分隔符添加到菜单。

clear()#

从菜单栏中移除所有操作。

注意

在 macOS 上,已被合并到系统菜单栏的菜单项不会被此函数移除。一种处理方法是自行移除多余的菜单项。你可以设置不同菜单的菜单角色,这样你可以提前知道哪些菜单项会被合并,哪些不会。然后决定是重新创建还是删除。

另请参阅

removeAction()

cornerWidget([corner=Qt.TopRightCorner])#
参数:

cornerCorner

返回类型:

QWidget

返回第一个菜单项的左侧或最后一个菜单项的右侧的部件,具体取决于 corner

注意

使用 Qt::TopRightCorner 或 Qt::TopLeftCorner 之外的角落会发出警告。

另请参阅

setCornerWidget()

hovered(action)#
参数:

actionQAction

当菜单操作被高亮时,会发出此信号;action 是导致事件发出的操作。

通常用于更新状态信息。

另请参阅

triggered() hovered()

initStyleOption(option, action)
参数:

使用菜单栏的值和信息从 action 初始化 option。当子类需要 QStyleOptionMenuItem 并且不想自行填充所有信息时,此方法非常有用。

insertMenu(before, menu)
参数:
返回类型:

QAction

此便利函数在 action before 之前插入 menu 并返回菜单的菜单动作。

另请参阅

insertAction() addMenu()

insertSeparator(before)
参数:

beforeQAction

返回类型:

QAction

此便利函数创建一个新分隔符动作,即一个返回 true 的 QAction::isSeparator() 的动作。函数将创建的 action 插入到此菜单栏的动作列表中 before 之前,并返回它。

isDefaultUp()
返回类型:

bool

属性 defaultUp 的获取器。

isNativeMenuBar()
返回类型:

bool

属性 nativeMenuBar 的获取器。

setActiveAction(action)#
参数:

actionQAction

设置当前高亮显示的操作为act

另请参阅

activeAction()

setCornerWidget(w[, corner=Qt.TopRightCorner])#
参数:

此操作会将指定的widget显示为第一个菜单项的左侧,或者根据corner在最后一个菜单项的右侧。

菜单栏将获得该widget的所有权,将其重新父化到菜单栏中。然而,如果corner已经包含了一个小部件,那么之前的小部件将不再由菜单栏管理,并且仍将是可见的子项。

注意

使用 Qt::TopRightCorner 或 Qt::TopLeftCorner 之外的角落会发出警告。

另请参阅

cornerWidget()

setDefaultUp(arg__1)#
参数:

arg__1 – bool

另请参阅

isDefaultUp()

属性defaultUpᅟ的设置器。

setNativeMenuBar(nativeMenuBar)#
参数:

nativeMenuBar – bool

另请参阅

isNativeMenuBar()

属性nativeMenuBarᅟ的设置器。

triggered(action)#
参数:

actionQAction

当鼠标点击触发属于该菜单栏的菜单中的操作时,会发出该信号;action是引起信号发出的操作。

注意

QMenuBar必须拥有QMenu的所有权,以便此信号能够起作用。

通常,您会使用QAction::triggered()将每个菜单操作连接到一个槽,但有时您会希望将几个项连接到单个槽(常见于用户从数组中选择)。在这种情况下,该信号非常有用。

另请参阅

hovered() triggered()