class QWidgetAction#

QWidgetAction 类通过一个用于将自定义小部件插入基于行动容器(如工具栏)的接口扩展了QAction。 更多

Inheritance diagram of PySide6.QtWidgets.QWidgetAction

概述#

方法#

虚函数#

注意

本文档可能包含自动从 C++ 转换为 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建票证来让我们知道。

详细描述#

应用程序中的大多数操作都表示为菜单中的项目或工具栏中的按钮。然而,有时需要更复杂的控件。例如,在文字处理程序中实现缩放操作可能会使用 QComboBox ,在 QToolBar 中显示不同的缩放级别。 QToolBar 提供了 insertWidget() 作为插入单个控件的便利函数。但是,如果您想在一个或多个容器中实现使用自定义控件进行可视化的操作,则必须派生 QWidgetAction

例如,如果将 QWidgetAction 添加到 QToolBar 中,则会调用 createWidget()。该函数的重新实现应该创建一个具有指定父对象的新自定义控件。

如果操作从容器控件中删除,则使用先前创建的自定义控件作为参数调用 deleteWidget()。默认实现隐藏控件并使用 QObject::deleteLater() 删除它。

如果您只有一个自定义控件,则可以使用 setDefaultWidget() 将它设置为默认控件。如果操作添加到 QToolBar 或支持 QWidgetAction 的通用动作容器中,则将使用该控件。如果将只有一个默认控件的 QWidgetAction 同时添加到两个工具栏中,那么在第一个添加了该动作的工具栏中显示默认控件。 QWidgetAction 接管默认控件的所有权。

请注意,激活操作的责任在于控件本身,例如通过重新实现鼠标事件处理程序并调用 QAction::trigger()。

macOS:如果您在 macOS 应用程序菜单栏中的菜单中添加控件,控件将被添加并正常工作,但有一些限制

  1. 控件从 QMenu 到本地菜单视图中的父控件之外。如果在其他地方显示菜单(例如作为弹出菜单),控件将不在那里。

  2. 小部件的焦点/键盘处理是不可能的。

  3. 由于苹果的设计,当前小部件上的鼠标跟踪不可用。

  4. 将 triggered() 信号连接到打开模态对话框的槽将会在 macOS 10.4 上导致崩溃(苹果已承认此漏洞),一种解决方案是使用 QueuedConnection 而不是 DirectConnection。

阅读

QWidget

__init__(parent)#
参数:

parentQObject

使用 parent 构建操作。

createWidget(parent)#
参数:

parentQWidget

返回类型:

QWidget

每当将操作添加到支持自定义小部件的容器小部件时,都会调用此函数。如果您不希望指定 parent 小部件中使用的自定义小部件作为操作的表示,则应返回 0。

createdWidgets()#
返回类型:

. QWidget 列表

返回操作加入的 GUI控件使用 createWidget() 的列表。

defaultWidget()#
返回类型:

QWidget

返回默认小部件。

deleteWidget(widget)#
参数:

widgetQWidget

每当操作被从使用自定义 widget 显示的操作的容器小部件中移除时,都会调用此函数。默认实现会隐藏 widget 并将其计划删除 using QObject::deleteLater()。

releaseWidget(widget)#
参数:

widgetQWidget

释放指定的小部件 widget

支持操作的容器小部件在该操作被移除时会调用此函数。

requestWidget(parent)#
参数:

parentQWidget

返回类型:

QWidget

返回一个表示操作的控件,其父控件为给定的 parent

支持动作的容器控件可以调用此函数来请求动作的可视表示控件。

setDefaultWidget(w)#
参数:

wQWidget

widget 设置为默认控件。所有权将转让给 QWidgetAction 。除非子类重新实现了 createWidget() 方法来返回一个新控件,否则在通过 requestWidget() 请求控件时使用默认控件。