QWidgetAction 类

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

头文件 #include <QWidgetAction>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QAction

公共函数

QWidgetAction(QObject *parent)
虚拟~QWidgetAction()
QWidget *defaultWidget() const
voidreleaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
voidsetDefaultWidget(QWidget *widget)

保护函数

virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *>createdWidgets() const
virtual voiddeleteWidget(QWidget *widget)

重写的保护函数

virtual boolevent(QEvent *event) override
virtual booleventFilter(QObject *obj, QEvent *event) override

详细描述

大多数应用中的动作都表示为菜单中的项目或工具栏中的按钮。但是,有时需要更复杂的小部件。例如,字处理器中的缩放动作可以通过 QComboBox 实现,该控件位于 QToolBar 中,显示不同级别的缩放。 QToolBar 提供了 QToolBar::insertWidget() 作为插入单个小部件的便利函数。但是,如果您想实现一个在多个容器中使用自定义小部件进行可视化的动作,则必须子类化 QWidgetAction。

例如,如果将 QWidgetAction 添加到 QToolBar 中,则将调用 QWidgetAction::createWidget()。该函数的重写版本应创建一个新的自定义小部件,并指定其父级。

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

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

请注意,激活操作的责任在于小部件本身,例如通过重写鼠标事件处理程序并调用 QAction::trigger

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

  1. 小部件被从 QMenu 重新父化到原生菜单视图。如果您在其他地方显示菜单(例如作为弹出菜单),则小部件将不会出现。
  2. 无法在小部件上进行焦点/键盘处理。
  3. 由于苹果的设计,目前小部件上的鼠标跟踪不起作用。
  4. triggered() 信号连接到打开模态对话框的槽将会导致 macOS 10.4 中崩溃(已由苹果确认的已知问题),一个解决方案是使用 QueuedConnection 而不是 DirectConnection。

另请参阅QActionQActionGroupQWidget

成员函数文档

[explicit] QWidgetAction::QWidgetAction(QObject *parent)

使用父项构造动作。

[虚函数 noexcept] QWidgetAction::~QWidgetAction()

销毁对象并释放分配的资源。

[虚保护函数] QWidget *QWidgetAction::createWidget(QWidget *parent)

每次将操作添加到支持自定义小部件的容器小部件时都会调用该函数。如果您不想在指定的 parent 小部件中用作动作表示的自定义小部件,则应返回0。

请参见deleteWidget()。

[保护函数] QList<QWidget *> QWidgetAction::createdWidgets() const

返回使用 createWidget() 并由操作添加到的小部件当前使用的 widget 列表。

QWidget *QWidgetAction::defaultWidget() const

返回默认小部件。

请参见setDefaultWidget()。

[虚保护函数] void QWidgetAction::deleteWidget(QWidget *widget)

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

另请参阅 createWidget()。

[覆盖虚保护] bool QWidgetAction::event(QEvent *event)

重实现了: QAction::event(QEvent *e)

[覆盖虚保护] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

重实现了: QObject::eventFilter(QObject *watched, QEvent *event)

void QWidgetAction::releaseWidget(QWidget *widget)

释放指定的 widget

支持动作的容器小部件在移除小部件动作时调用此函数。

另请参阅 requestWidget(),deleteWidget() 和 defaultWidget()。

QWidget *QWidgetAction::requestWidget(QWidget *parent)

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

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

另请参阅 releaseWidgetcreateWidgetdefaultWidget()。

void QWidgetAction::setDefaultWidget(QWidget *widget)

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

另请参阅 defaultWidget()。

© 2024 The Qt Company Ltd. 本文档中的文档贡献的版权属于其各自的拥有者。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供的。Qt 和相应的标志是芬兰以及/或其他国家/地区的 The Qt Company Ltd. 的 商标。所有其他商标均属于其各自的所有者。