PySide6.QtWidgets.QWidgetAction

class QWidgetAction

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

PySide6.QtWidgets.QWidgetAction 的继承图

概要

方法

虚拟方法

注意

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

详细描述

应用程序中的大多数操作都表示为菜单中的项目或工具栏中的按钮。然而,有时需要更复杂的小部件。例如,文字处理器中的缩放操作可以通过在QToolBar中使用QComboBox来实现,展示一系列不同的缩放级别。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)
Parameters:

父对象QObject

使用parent构造一个动作。

createWidget(parent)
Parameters:

父级QWidget

Return type:

QWidget

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

另请参阅

deleteWidget()

createdWidgets()
Return type:

.列表的 QWidget

返回已使用createWidget()并且当前正在被操作添加到的部件使用的部件列表。

defaultWidget()
Return type:

QWidget

返回默认的小部件。

另请参阅

setDefaultWidget()

deleteWidget(widget)
Parameters:

widgetQWidget

每当从使用自定义widget显示操作的容器小部件中移除操作时,都会调用此函数,该小部件之前是使用createWidget()创建的。默认实现隐藏widget并使用QObject::deleteLater()安排其删除。

另请参阅

createWidget()

releaseWidget(widget)
Parameters:

widgetQWidget

释放指定的 widget

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

requestWidget(parent)
Parameters:

父级QWidget

Return type:

QWidget

返回一个表示操作的小部件,具有给定的parent

支持操作的容器小部件可以调用此函数来请求一个小部件作为操作的可视化表示。

setDefaultWidget(w)
Parameters:

wQWidget

widget设置为默认小部件。所有权转移到QWidgetAction。除非子类重新实现了createWidget()以返回一个新的小部件,否则当容器小部件通过requestWidget()请求小部件时,将使用默认小部件。

另请参阅

defaultWidget()