QDialog Class
La classe QDialog est la classe de base des fenêtres de dialogue. Plus d'informations...
| En-tête : | #include <QDialog> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite : | QWidget |
| Inherited By : | QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, et QWizard |
Types publics
| enum | DialogCode { Accepted, Rejected } |
Propriétés
- modal : bool
- sizeGripEnabled : bool
Fonctions publiques
| QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| virtual | ~QDialog() |
| bool | isSizeGripEnabled() const |
| int | result() const |
| void | setModal(bool modal) |
| void | setResult(int i) |
| void | setSizeGripEnabled(bool) |
Fonctions publiques réimplémentées
| virtual QSize | minimumSizeHint() const override |
| virtual void | setVisible(bool visible) override |
| virtual QSize | sizeHint() const override |
Emplacements publics
| virtual void | accept() |
| virtual void | done(int r) |
| virtual int | exec() |
| virtual void | open() |
| virtual void | reject() |
Signaux
Fonctions protégées réimplémentées
| virtual void | closeEvent(QCloseEvent *e) override |
| virtual void | contextMenuEvent(QContextMenuEvent *e) override |
| virtual bool | eventFilter(QObject *o, QEvent *e) override |
| virtual void | keyPressEvent(QKeyEvent *e) override |
| virtual void | resizeEvent(QResizeEvent *) override |
| virtual void | showEvent(QShowEvent *event) override |
Description détaillée
Une fenêtre de dialogue est une fenêtre de premier niveau principalement utilisée pour des tâches de courte durée et de brèves communications avec l'utilisateur. Les QDialogs peuvent être modales ou sans modèle. Les QDialogs peuvent fournir un return value, et ils peuvent avoir un default buttons. Les QDialogs peuvent également avoir un QSizeGrip dans leur coin inférieur droit, en utilisant setSizeGripEnabled().
Notez que QDialog (et tout autre widget de type Qt::Dialog) utilise le widget parent légèrement différemment des autres classes de Qt. Un dialogue est toujours un widget de premier niveau, mais s'il a un parent, son emplacement par défaut est centré sur le widget de premier niveau du parent (s'il n'est pas lui-même de premier niveau). Il partage également l'entrée de la barre des tâches du parent.
Utilisez la surcharge de la fonction QWidget::setParent() pour modifier la propriété d'un widget QDialog. Cette fonction vous permet de définir explicitement les drapeaux de fenêtre du widget réparti ; l'utilisation de la fonction surchargée effacera les drapeaux de fenêtre spécifiant les propriétés du système de fenêtres pour le widget (en particulier, elle réinitialisera le drapeau Qt::Dialog ).
Remarque : la relation parentale de la boîte de dialogue n' implique pas que la boîte de dialogue soit toujours empilée au-dessus de la fenêtre parentale. Pour s'assurer que la boîte de dialogue est toujours au-dessus, rendez la boîte de dialogue modale. Ceci s'applique également aux fenêtres enfants de la boîte de dialogue elle-même. Pour que les fenêtres enfant de la boîte de dialogue restent au-dessus de la boîte de dialogue, rendez les fenêtres enfant modales également.
Dialogues modaux
Une boîte de dialogue modale est une boîte de dialogue qui bloque la saisie d'autres fenêtres visibles dans la même application. Les boîtes de dialogue utilisées pour demander un nom de fichier à l'utilisateur ou pour définir les préférences de l'application sont généralement modales. Les boîtes de dialogue peuvent être application modal (par défaut) ou window modal.
Lorsqu'une boîte de dialogue modale est ouverte, l'utilisateur doit finir d'interagir avec la boîte de dialogue et la fermer avant de pouvoir accéder à une autre fenêtre de l'application. Les boîtes de dialogue modales de fenêtre ne bloquent que l'accès à la fenêtre associée à la boîte de dialogue, ce qui permet à l'utilisateur de continuer à utiliser les autres fenêtres de l'application.
La manière la plus courante d'afficher une boîte de dialogue modale est d'appeler sa fonction open(). Vous pouvez également appeler setModal(true) ou setWindowModality(), puis show(). Dans les deux cas, une fois la boîte de dialogue affichée, le contrôle est immédiatement rendu à l'appelant. Vous devez vous connecter au signal finished() pour savoir quand la boîte de dialogue est fermée et quel est son return value. Vous pouvez également vous connecter aux signaux accepted() et rejected().
Lors de l'implémentation d'une boîte de dialogue personnalisée, pour fermer la boîte de dialogue et renvoyer une valeur appropriée, connectez un bouton par défaut, par exemple un bouton OK, à l'emplacement accept(), et un bouton Annuler à l'emplacement reject(). Vous pouvez également appeler l'emplacement done() avec Accepted ou Rejected.
Si vous affichez la boîte de dialogue modale pour effectuer une opération de longue durée, il est recommandé d'effectuer l'opération dans un fil d'exécution en arrière-plan, afin de ne pas interférer avec le fil d'exécution de l'interface graphique.
Attention : Lorsque vous utilisez open() ou show(), la boîte de dialogue modale ne doit pas être créée sur la pile, afin qu'elle ne soit pas détruite dès que le contrôle revient à l'appelant.
Remarque : il est possible d'afficher une boîte de dialogue modale en mode bloquant en appelant exec(). Dans ce cas, le contrôle retourne au thread de l'interface graphique uniquement lorsque la boîte de dialogue est fermée. Cependant, cette approche est déconseillée, car elle crée une boucle d'événements imbriquée, qui n'est pas entièrement prise en charge par certaines plates-formes.
Dialogues sans modèle
Une boîte de dialogue sans modèle est une boîte de dialogue qui fonctionne indépendamment des autres fenêtres de la même application. Les boîtes de dialogue de recherche et de remplacement dans les traitements de texte sont souvent sans modèle pour permettre à l'utilisateur d'interagir à la fois avec la fenêtre principale de l'application et avec la boîte de dialogue.
Les boîtes de dialogue sans modèle sont affichées à l'aide de show(), qui redonne immédiatement le contrôle à l'appelant.
Si vous invoquez la fonction show() après avoir masqué une boîte de dialogue, celle-ci sera affichée dans sa position initiale. En effet, le gestionnaire de fenêtres décide de la position des fenêtres qui n'ont pas été placées explicitement par le programmeur. Pour préserver la position d'une boîte de dialogue qui a été déplacée par l'utilisateur, enregistrez sa position dans votre gestionnaire closeEvent(), puis déplacez la boîte de dialogue à cette position avant de la réafficher.
Bouton par défaut
Le bouton par défaut d'une boîte de dialogue est le bouton qui est enfoncé lorsque l'utilisateur appuie sur Entrée (Return). Ce bouton est utilisé pour indiquer que l'utilisateur accepte les paramètres de la boîte de dialogue et souhaite la fermer. Utilisez QPushButton::setDefault(), QPushButton::isDefault() et QPushButton::autoDefault() pour définir et contrôler le bouton par défaut de la boîte de dialogue.
Touche d'échappement
Si l'utilisateur appuie sur la touche Esc dans une boîte de dialogue, QDialog::reject() est appelé. Cela entraîne la fermeture de la fenêtre : Le site close event ne peut pas être ignored.
Extensibilité
L'extensibilité est la possibilité d'afficher la boîte de dialogue de deux manières : une boîte de dialogue partielle qui affiche les options les plus couramment utilisées et une boîte de dialogue complète qui affiche toutes les options. En règle générale, une boîte de dialogue extensible apparaît initialement comme une boîte de dialogue partielle, mais avec un bouton de basculement More. Si l'utilisateur appuie sur le bouton de basculement , la boîte de dialogue complète s'affiche. Si l'utilisateur appuie sur le bouton More, la boîte de dialogue est développée.
Valeur de retour (boîtes de dialogue modales)
Les boîtes de dialogue modales sont souvent utilisées dans des situations où une valeur de retour est nécessaire, par exemple pour indiquer si l'utilisateur a appuyé sur OK ou Cancel. Une boîte de dialogue peut être fermée en appelant les slots accept() ou reject(), et exec() renverra Accepted ou Rejected selon le cas. L'appel à exec() renvoie le résultat du dialogue. Le résultat est également disponible à partir de result() si le dialogue n'a pas été détruit.
Pour modifier le comportement de fermeture de votre boîte de dialogue, vous pouvez réimplémenter les fonctions accept(), reject() ou done(). La fonction closeEvent() ne doit être réimplémentée que pour préserver la position de la boîte de dialogue ou pour remplacer le comportement standard de fermeture ou de rejet.
Exemples de code
Une boîte de dialogue modale :
void EditorWindow::countWords() { WordCountDialog dialog(this); dialog.setWordCount(document().wordCount()); dialog.exec(); }
Une boîte de dialogue sans modèle :
void EditorWindow::find() { if (!findDialog) { findDialog = new FindDialog(this); connect(findDialog, &FindDialog::findNext, this, &EditorWindow::findNext); } findDialog->show(); findDialog->raise(); findDialog->activateWindow(); }
Un dialogue avec une extension :
mainLayout->setSizeConstraint(QLayout::SetFixedSize); findButton = new QPushButton(tr("&Find")); moreButton = new QPushButton(tr("&More...")); moreButton->setCheckable(true); extension = new ExtendedControls; mainLayout->addWidget(extension); extension->hide(); connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);
En définissant la propriété sizeConstraint de la disposition de la boîte de dialogue sur SetFixedSize, la boîte de dialogue ne sera pas redimensionnable par l'utilisateur et se réduira automatiquement lorsque l'extension sera masquée.
Voir aussi QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, et Standard Dialogs Example.
Documentation sur les types de membres
enum QDialog::DialogCode
Valeur renvoyée par une boîte de dialogue modale.
| Constante | Valeur |
|---|---|
QDialog::Accepted | 1 |
QDialog::Rejected | 0 |
Propriété Documentation
modal : bool
Cette propriété indique si show() doit ouvrir la boîte de dialogue de manière modale ou sans modèle
Par défaut, cette propriété vaut false et show() ouvre la boîte de dialogue sans modèle. Attribuer la valeur true à cette propriété équivaut à attribuer la valeur Qt::ApplicationModal à QWidget::windowModality.
exec() ignore la valeur de cette propriété et ouvre toujours la boîte de dialogue en mode modal.
Fonctions d'accès :
| bool | isModal() const |
| void | setModal(bool modal) |
Voir également QWidget::windowModality, show() et exec().
sizeGripEnabled : bool
Cette propriété indique si la poignée de taille est activée
Une adresse QSizeGrip est placée dans le coin inférieur droit de la boîte de dialogue lorsque cette propriété est activée. Par défaut, la poignée de taille est désactivée.
Fonctions d'accès :
| bool | isSizeGripEnabled() const |
| void | setSizeGripEnabled(bool) |
Documentation des fonctions membres
[explicit] QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Construit un dialogue avec le parent parent.
Une boîte de dialogue est toujours un widget de premier niveau, mais si elle a un parent, son emplacement par défaut est centré sur le parent. Il partagera également l'entrée de la barre des tâches du parent.
Les drapeaux de widget f sont transmis au constructeur QWidget. Si, par exemple, vous ne voulez pas de bouton What's This dans la barre de titre de la boîte de dialogue, passez Qt::WindowTitleHint | Qt::WindowSystemMenuHint à f.
Voir aussi QWidget::setWindowFlags().
[virtual noexcept] QDialog::~QDialog()
Détruit le site QDialog en supprimant tous ses enfants.
[virtual slot] void QDialog::accept()
Masque la boîte de dialogue modale et attribue la valeur Accepted au code de résultat.
Voir aussi reject() et done().
[signal] void QDialog::accepted()
Ce signal est émis lorsque la boîte de dialogue a été acceptée soit par l'utilisateur, soit en appelant accept() ou done() avec l'argument QDialog::Accepted.
Notez que ce signal n'est pas émis lorsque la boîte de dialogue est masquée par hide() ou setVisible(false). Cela inclut la suppression de la boîte de dialogue lorsqu'elle est visible.
Voir aussi finished() et rejected().
[override virtual protected] void QDialog::closeEvent(QCloseEvent *e)
Réimplémente : QWidget::closeEvent(QCloseEvent *event).
[override virtual protected] void QDialog::contextMenuEvent(QContextMenuEvent *e)
Réimplémente : QWidget::contextMenuEvent(QContextMenuEvent *event).
[virtual slot] void QDialog::done(int r)
Ferme la boîte de dialogue et fixe son code de résultat à r. Le signal finished() émettra r; si r est QDialog::Accepted ou QDialog::Rejected, les signaux accepted() ou rejected() seront également émis, respectivement.
Si cette boîte de dialogue est affichée avec exec(), done() entraîne également la fin de la boucle d'événements locale et exec() renvoie r.
Comme pour QWidget::close(), done() supprime la boîte de dialogue si l'indicateur Qt::WA_DeleteOnClose est activé. Si la boîte de dialogue est le widget principal de l'application, l'application se termine. Si la boîte de dialogue est la dernière fenêtre fermée, le signal QGuiApplication::lastWindowClosed() est émis.
Voir aussi accept(), reject(), QApplication::activeWindow() et QCoreApplication::quit().
[override virtual protected] bool QDialog::eventFilter(QObject *o, QEvent *e)
Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).
[virtual slot] int QDialog::exec()
Affiche la boîte de dialogue sous forme de modal dialog, en la bloquant jusqu'à ce que l'utilisateur la ferme. La fonction renvoie un résultat DialogCode.
Si la boîte de dialogue est application modal, l'utilisateur ne peut interagir avec aucune autre fenêtre de la même application tant qu'il n'a pas fermé la boîte de dialogue. Si la boîte de dialogue est window modal, seule l'interaction avec la fenêtre parente est bloquée tant que la boîte de dialogue est ouverte. Par défaut, la boîte de dialogue est modale.
Remarque : évitez d'utiliser cette fonction ; utilisez plutôt open(). Contrairement à exec(), open() est asynchrone et ne déclenche pas de boucle événementielle supplémentaire. Cela permet d'éviter une série de bogues dangereux (par exemple, la suppression du parent de la boîte de dialogue alors que celle-ci est ouverte via exec()). Lorsque vous utilisez open(), vous pouvez vous connecter au signal finished() de QDialog pour être informé de la fermeture de la boîte de dialogue.
Voir aussi open(), show(), result(), et setWindowModality().
[signal] void QDialog::finished(int result)
Ce signal est émis lorsque le code result de la boîte de dialogue a été défini, soit par l'utilisateur, soit en appelant done(), accept() ou reject().
Notez que ce signal n'est pas émis lorsque vous masquez la boîte de dialogue avec hide() ou setVisible(false). Cela inclut la suppression de la boîte de dialogue lorsqu'elle est visible.
Voir également accepted() et rejected().
[override virtual protected] void QDialog::keyPressEvent(QKeyEvent *e)
Réimplémente : QWidget::keyPressEvent(QKeyEvent *event).
[override virtual] QSize QDialog::minimumSizeHint() const
Réimplémente une fonction d'accès à la propriété : QWidget::minimumSizeHint.
[virtual slot] void QDialog::open()
Affiche le dialogue sous la forme d'un window modal dialog, qui revient immédiatement.
Voir aussi exec(), show(), result() et setWindowModality().
[virtual slot] void QDialog::reject()
Masque la boîte de dialogue modale et attribue la valeur Rejected au code de résultat.
Voir aussi accept() et done().
[signal] void QDialog::rejected()
Ce signal est émis lorsque la boîte de dialogue a été rejetée soit par l'utilisateur, soit en appelant reject() ou done() avec l'argument QDialog::Rejected.
Notez que ce signal n'est pas émis lorsque vous masquez le dialogue avec hide() ou setVisible(false). Cela inclut la suppression de la boîte de dialogue lorsqu'elle est visible.
Voir aussi finished() et accepted().
[override virtual protected] void QDialog::resizeEvent(QResizeEvent *)
Réimplémente : QWidget::resizeEvent(QResizeEvent *event).
int QDialog::result() const
En général, renvoie le code de résultat de la boîte de dialogue modale, Accepted ou Rejected.
Remarque : lorsqu'elle est appelée sur une instance QMessageBox, la valeur renvoyée est une valeur de l'énumération QMessageBox::StandardButton.
N'appelez pas cette fonction si la boîte de dialogue a été construite avec l'attribut Qt::WA_DeleteOnClose.
Voir aussi setResult().
void QDialog::setResult(int i)
Définit le code de résultat de la boîte de dialogue modale à i.
Note : Nous vous recommandons d'utiliser l'une des valeurs définies par QDialog::DialogCode.
Voir aussi result().
[override virtual] void QDialog::setVisible(bool visible)
Réimplémente une fonction d'accès à la propriété : QWidget::visible.
[override virtual protected] void QDialog::showEvent(QShowEvent *event)
Réimplémente : QWidget::showEvent(QShowEvent *event).
[override virtual] QSize QDialog::sizeHint() const
Réimplémente une fonction d'accès à la propriété : QWidget::sizeHint.
© 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.