Sur cette page

QWidgetAction Class

La classe QWidgetAction étend QAction en proposant une interface pour l'insertion de widgets personnalisés dans des conteneurs basés sur l'action, tels que les barres d'outils. Plus d'informations...

En-tête : #include <QWidgetAction>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Héritages : QAction

Fonctions publiques

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

Fonctions protégées

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

Fonctions protégées réimplémentées

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

Description détaillée

La plupart des actions dans une application sont représentées par des éléments dans les menus ou des boutons dans les barres d'outils. Cependant, des widgets plus complexes sont parfois nécessaires. Par exemple, une action de zoom dans un traitement de texte peut être réalisée à l'aide d'un QComboBox dans un QToolBar, présentant une gamme de niveaux de zoom différents. QToolBar fournit QToolBar::insertWidget() comme fonction de commodité pour l'insertion d'un widget unique. Toutefois, si vous souhaitez mettre en œuvre une action qui utilise des widgets personnalisés pour la visualisation dans plusieurs conteneurs, vous devez sous-classer QWidgetAction.

Si un QWidgetAction est ajouté, par exemple, à un site QToolBar, la fonction QWidgetAction::createWidget() est appelée. Les réimplémentations de cette fonction doivent créer un nouveau widget personnalisé avec le parent spécifié.

Si l'action est supprimée d'un widget conteneur, la fonction QWidgetAction::deleteWidget() est appelée avec le widget personnalisé précédemment créé comme argument. L'implémentation par défaut cache le widget et le supprime à l'aide de QObject::deleteLater().

Si vous n'avez qu'un seul widget personnalisé, vous pouvez le définir comme widget par défaut en utilisant setDefaultWidget(). Ce widget sera alors utilisé si l'action est ajoutée à un QToolBar, ou en général à un conteneur d'action qui prend en charge QWidgetAction. Si une action QWidgetAction ne comportant qu'un widget par défaut est ajoutée à deux barres d'outils en même temps, le widget par défaut n'est affiché que dans la première barre d'outils à laquelle l'action a été ajoutée. QWidgetAction devient propriétaire du widget par défaut.

Notez que c'est au widget d'activer l'action, par exemple en réimplémentant les gestionnaires d'événements de la souris et en appelant QAction::trigger().

macOS: Si vous ajoutez un widget à un menu dans la barre de menu de l'application sous macOS, le widget sera ajouté et fonctionnera, mais avec certaines limitations :

  1. Le widget est reparti de la page QMenu vers la vue native du menu. Si vous affichez le menu à un autre endroit (par exemple en tant que menu contextuel), le widget ne sera pas présent.
  2. La gestion du focus/clavier du widget n'est pas possible.
  3. En raison de la conception d'Apple, le suivi de la souris sur le widget ne fonctionne pas actuellement.
  4. La connexion du signal triggered() à un slot qui ouvre une boîte de dialogue modale provoque un crash dans macOS 10.4 (bogue connu et reconnu par Apple), une solution de contournement consiste à utiliser une QueuedConnection au lieu d'une DirectConnection.

Voir aussi QAction, QActionGroup, et QWidget.

Documentation des fonctions membres

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

Construit une action avec parent.

[virtual noexcept] QWidgetAction::~QWidgetAction()

Détruit l'objet et libère les ressources allouées.

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

Cette fonction est appelée chaque fois que l'action est ajoutée à un widget conteneur qui prend en charge les widgets personnalisés. Si vous ne souhaitez pas qu'un widget personnalisé soit utilisé comme représentation de l'action dans le widget parent spécifié, la valeur 0 doit être renvoyée.

Voir également deleteWidget().

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

Renvoie la liste des widgets qui ont utilisé createWidget() et qui sont actuellement utilisés par les widgets auxquels l'action a été ajoutée.

QWidget *QWidgetAction::defaultWidget() const

Renvoie le widget par défaut.

Voir aussi setDefaultWidget().

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

Cette fonction est appelée chaque fois que l'action est supprimée d'un widget conteneur qui affiche l'action à l'aide d'un widget personnalisé préalablement créé à l'aide de createWidget(). L'implémentation par défaut cache le widget et planifie sa suppression à l'aide de QObject::deleteLater().

Voir également createWidget().

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

Réimplémente : QAction::event(QEvent *e).

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

Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).

void QWidgetAction::releaseWidget(QWidget *widget)

Libère le site widget spécifié.

Les widgets du conteneur qui prennent en charge les actions appellent cette fonction lorsqu'une action de widget est supprimée.

Voir également requestWidget(), deleteWidget() et defaultWidget().

QWidget *QWidgetAction::requestWidget(QWidget *parent)

Renvoie un widget qui représente l'action, avec l'adresse parent.

Les widgets du conteneur qui prennent en charge les actions peuvent appeler cette fonction pour demander un widget comme représentation visuelle de l'action.

Voir aussi releaseWidget(), createWidget() et defaultWidget().

void QWidgetAction::setDefaultWidget(QWidget *widget)

Définit widget comme widget par défaut. La propriété est transférée à QWidgetAction. À moins que createWidget() ne soit réimplémenté par une sous-classe pour renvoyer un nouveau widget, le widget par défaut est utilisé lorsqu'un widget conteneur demande un widget par l'intermédiaire de requestWidget().

Voir également 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.