En esta página

QWidgetAction Class

La clase QWidgetAction extiende QAction por una interfaz para insertar widgets personalizados en contenedores basados en acciones, como barras de herramientas. Más...

Cabecera: #include <QWidgetAction>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QAction

Funciones Públicas

QWidgetAction(QObject *parent)
virtual ~QWidgetAction()
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

Funciones protegidas

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

Funciones protegidas reimplementadas

virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *obj, QEvent *event) override

Descripción detallada

La mayoría de las acciones en una aplicación se representan como elementos en menús o botones en barras de herramientas. Sin embargo, a veces son necesarios widgets más complejos. Por ejemplo, una acción de zoom en un procesador de textos puede realizarse utilizando un QComboBox en un QToolBar, presentando un rango de diferentes niveles de zoom. QToolBar proporciona QToolBar::insertWidget() como función de conveniencia para insertar un único widget. Sin embargo, si quieres implementar una acción que utilice widgets personalizados para la visualización en múltiples contenedores, entonces tienes que subclasificar QWidgetAction.

Si se añade un QWidgetAction por ejemplo a QToolBar entonces se llama a QWidgetAction::createWidget(). Las reimplementaciones de esa función deberían crear un nuevo widget personalizado con el padre especificado.

Si la acción se elimina de un widget contenedor, entonces se llama a QWidgetAction::deleteWidget() con el widget personalizado creado previamente como argumento. La implementación por defecto oculta el widget y lo elimina utilizando QObject::deleteLater().

Si sólo tienes un widget personalizado, puedes establecerlo como widget predeterminado utilizando setDefaultWidget(). Ese widget se usará entonces si la acción se añade a QToolBar, o en general a un contenedor de acciones que soporte QWidgetAction. Si una QWidgetAction con sólo un widget por defecto se añade a dos barras de herramientas al mismo tiempo, entonces el widget por defecto se muestra sólo en la primera barra de herramientas a la que se añadió la acción. QWidgetAction asume la propiedad del widget por defecto.

Ten en cuenta que depende del widget activar la acción, por ejemplo reimplementando manejadores de eventos de ratón y llamando a QAction::trigger().

macOS: Si añades un widget a un menú de la barra de menús de la aplicación en macOS, el widget se añadirá y funcionará pero con algunas limitaciones:

  1. El widget se reasigna desde QMenu a la vista nativa del menú. Si muestra el menú en algún otro lugar (por ejemplo, como un menú emergente), el widget no estará allí.
  2. No es posible manejar el widget desde el foco/teclado.
  3. Debido al diseño de Apple, actualmente no funciona el seguimiento del ratón en el widget.
  4. Conectar la señal triggered() a una ranura que abre un diálogo modal provocará un fallo en macOS 10.4 (error conocido reconocido por Apple), una solución es utilizar una QueuedConnection en lugar de una DirectConnection.

Véase también QAction, QActionGroup, y QWidget.

Documentación de las funciones miembro

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

Construye una acción con parent.

[virtual noexcept] QWidgetAction::~QWidgetAction()

Destruye el objeto y libera los recursos asignados.

[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)

Esta función es llamada siempre que la acción es añadida a un widget contenedor que soporta widgets personalizados. Si no desea que se utilice un widget personalizado como representación de la acción en el widget parent especificado, entonces debe devolverse 0.

Véase también deleteWidget().

[protected] QList<QWidget *> QWidgetAction::createdWidgets() const

Devuelve la lista de widgets que han estado utilizando createWidget() y que actualmente están siendo utilizados por widgets a los que se ha añadido la acción.

QWidget *QWidgetAction::defaultWidget() const

Devuelve el widget por defecto.

Véase también setDefaultWidget().

[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)

Esta función es llamada cada vez que la acción es eliminada de un widget contenedor que muestra la acción usando un widget personalizado previamente creado usando createWidget(). La implementación por defecto oculta el widget y programa su eliminación utilizando QObject::deleteLater().

Véase también createWidget().

[override virtual protected] bool QWidgetAction::event(QEvent *event)

Reimplementa: QAction::event(QEvent *e).

[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).

void QWidgetAction::releaseWidget(QWidget *widget)

Libera el widget especificado.

Los widgets contenedores que soportan acciones llaman a esta función cuando se elimina una acción del widget.

Véase también requestWidget(), deleteWidget() y defaultWidget().

QWidget *QWidgetAction::requestWidget(QWidget *parent)

Devuelve un widget que representa la acción, con la dirección parent.

Los widgets contenedores que soportan acciones pueden llamar a esta función para solicitar un widget como representación visual de la acción.

Véase también releaseWidget(), createWidget(), y defaultWidget().

void QWidgetAction::setDefaultWidget(QWidget *widget)

Establece widget como widget por defecto. La propiedad se transfiere a QWidgetAction. A menos que createWidget() sea reimplementado por una subclase para devolver un nuevo widget, el widget por defecto se utiliza cuando un widget contenedor solicita un widget a través de requestWidget().

Véase también defaultWidget().

© 2026 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.