Sur cette page

QWidgetAction Class

La classe `QWidgetAction` étend la classe ` QAction ` en proposant une interface permettant d'insérer des widgets personnalisés dans des conteneurs basés sur des actions, tels que les barres d'outils. En savoir plus...

En-tête : #include <QWidgetAction>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite de : 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 d’une application sont représentées par des éléments de menu 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 différents niveaux de zoom. ` QToolBar ` fournit la fonction pratique ` QToolBar::insertWidget()` pour insérer un seul widget. Cependant, si vous souhaitez implémenter une action qui utilise des widgets personnalisés pour l’affichage dans plusieurs conteneurs, vous devez alors créer une sous-classe de `QWidgetAction`.

Si une QWidgetAction est ajoutée, par exemple, à un QToolBar, alors 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 méthode ` QWidgetAction::deleteWidget()` est appelée avec le widget personnalisé créé précédemment comme argument. L'implémentation par défaut masque le widget et le supprime à l'aide de ` QObject::deleteLater()`.

Si vous ne disposez que d’un seul widget personnalisé, vous pouvez le définir comme widget par défaut à l’aide de ` setDefaultWidget()`. Ce widget sera alors utilisé si l’action est ajoutée à un ` QToolBar`, ou plus généralement à un conteneur d’actions prenant en charge `QWidgetAction`. Si un QWidgetAction ne comportant qu’un seul widget par défaut est ajouté simultanément à deux barres d’outils, le widget par défaut n’apparaîtra que dans la première barre d’outils à laquelle l’action a été ajoutée. QWidgetAction prend alors possession du widget par défaut.

Notez qu’il appartient au widget d’activer l’action, par exemple en réimplémentant des gestionnaires d’événements de souris et en appelant ` QAction::trigger()`().

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

  1. Le widget est détaché de l’ QMenu pour être rattaché à la vue de menu native. Si vous affichez le menu à un autre endroit (par exemple sous forme de menu contextuel), le widget n’y figurera pas.
  2. La gestion du focus et du clavier pour le 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. Le fait de connecter le signal « triggered » () à un slot ouvrant une boîte de dialogue modale provoquera un plantage sous macOS 10.4 (bug connu et reconnu par Apple) ; une solution consiste à utiliser une « QueuedConnection » à la place d’une « DirectConnection ».

Voir également QAction, QActionGroup et QWidget.

Documentation sur les fonctions membres

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

Crée une action à l'aide de ` 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 prenant en charge les widgets personnalisés. Si vous ne souhaitez pas qu'un widget personnalisé soit utilisé pour représenter l'action dans le widget « parent » spécifié, vous devez renvoyer la valeur 0.

Voir également deleteWidget().

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

Renvoie la liste des widgets qui ont utilisé la fonction ` 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é créé précédemment via la fonction createWidget(). L'implémentation par défaut masque l'« widget » et programme sa suppression à l'aide de la fonction 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 l'widget spécifiée.

Les widgets conteneurs prenant 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 représentant l'action, avec l'parent on fournie.

Les widgets conteneurs prenant en charge les actions peuvent appeler cette fonction pour demander un widget servant de représentation visuelle de l'action.

Voir également 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 la méthode ` createWidget()` ne soit réimplémentée par une sous-classe pour renvoyer un nouveau widget, c'est le widget par défaut qui est utilisé lorsqu'un widget conteneur demande un widget via ` 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.