QWidgetAction Class
QWidgetAction 类通过一个接口扩展了QAction ,该接口用于将自定义 widget 插入基于动作的容器(如工具栏)。更多
Header: | #include <QWidgetAction> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
继承: | QAction |
公共函数
QWidgetAction(QObject *parent) | |
virtual | ~QWidgetAction() |
QWidget * | defaultWidget() const |
void | releaseWidget(QWidget *widget) |
QWidget * | requestWidget(QWidget *parent) |
void | setDefaultWidget(QWidget *widget) |
保护函数
virtual QWidget * | createWidget(QWidget *parent) |
QList<QWidget *> | createdWidgets() const |
virtual void | deleteWidget(QWidget *widget) |
重新实现的受保护函数
virtual bool | event(QEvent *event) override |
virtual bool | eventFilter(QObject *obj, QEvent *event) override |
详细说明
应用程序中的大多数操作都可以用菜单中的项目或工具栏中的按钮来表示。但有时需要使用更复杂的部件。例如,文字处理器中的缩放操作可以通过QToolBar 中的QComboBox 来实现,它可以显示一系列不同的缩放级别。QToolBar 提供了QToolBar::insertWidget() 作为插入单个部件的便捷函数。但是,如果您想在多个容器中使用自定义部件实现可视化操作,那么您就必须子类化 QWidgetAction。
例如,如果一个 QWidgetAction 被添加到QToolBar ,那么QWidgetAction::createWidget() 就会被调用。对该函数的重新实现应使用指定的父类创建一个新的自定义 widget。
如果从容器 widget 中移除该操作,则会调用QWidgetAction::deleteWidget() 并将之前创建的自定义 widget 作为参数。默认实现会隐藏该 widget,并使用QObject::deleteLater() 将其删除。
如果只有一个自定义 widget,则可以使用setDefaultWidget() 将其设置为默认 widget。然后,如果该动作被添加到QToolBar ,或一般添加到支持 QWidgetAction 的动作容器中,就会使用该 widget。如果一个只有默认 widget 的 QWidgetAction 同时被添加到两个工具栏中,那么默认 widget 只会显示在该动作被添加到的第一个工具栏中。QWidgetAction 接管了默认 widget 的所有权。
请注意,激活该操作的责任在于部件,例如通过重新实现鼠标事件处理程序和调用QAction::trigger() 来激活。
macOS:在 macOS 上,如果将 widget 添加到应用程序菜单栏的菜单中,该 widget 就会被添加并开始运行,但会受到一些限制:
另请参阅 QAction,QActionGroup, 和QWidget 。
成员函数文档
[explicit]
QWidgetAction::QWidgetAction(QObject *parent)
用parent 构建一个动作。
[virtual noexcept]
QWidgetAction::~QWidgetAction()
销毁对象并释放已分配的资源。
[virtual protected]
QWidget *QWidgetAction::createWidget(QWidget *parent)
当操作被添加到支持自定义 widget 的容器 widget 时,该函数将被调用。如果不希望在指定的parent widget 中使用自定义 widget 来表示操作,则应返回 0。
另请参阅 deleteWidget()。
[protected]
QList<QWidget *> QWidgetAction::createdWidgets() const
返回已使用createWidget() 且当前正在被添加操作的部件使用的部件列表。
QWidget *QWidgetAction::defaultWidget() const
返回默认 widget。
另请参见 setDefaultWidget()。
[virtual protected]
void QWidgetAction::deleteWidget(QWidget *widget)
每当使用createWidget() 创建的自定义widget 从显示该操作的容器部件中删除该操作时,都会调用该函数。默认实现会隐藏widget ,并使用QObject::deleteLater() 安排删除时间。
另请参阅 createWidget()。
[override virtual protected]
bool QWidgetAction::event(QEvent *event)
重实现:QAction::event(QEvent *e)。
[override virtual protected]
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)
返回表示动作的 widget,其给定值为parent 。
支持动作的容器部件可以调用此函数来请求一个部件作为动作的可视化表示。
另请参阅 releaseWidget()、createWidget() 和defaultWidget()。
void QWidgetAction::setDefaultWidget(QWidget *widget)
将widget 设置为默认 widget。所有权将转移到QWidgetAction 。除非子类重新实现createWidget() 以返回一个新部件,否则当容器部件通过requestWidget() 请求一个部件时,将使用默认部件。
另请参阅 defaultWidget()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.