Sur cette page

QDialog Class

La classe `QDialog` est la classe de base des fenêtres de dialogue. En savoir plus...

En-tête : #include <QDialog>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite de : QWidget
Hérité par :

QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, et QWizard

Types publics

enum DialogCode { Accepted, Rejected }

Propriétés

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

Slots publics

virtual void accept()
virtual void done(int r)
virtual int exec()
virtual void open()
virtual void reject()

Signaux

void accepted()
void finished(int result)
void rejected()

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 des communications brèves avec l’utilisateur. Les QDialogs peuvent être modales ou non modales. Les QDialogs peuvent fournir une « return value » et disposer d’une « default buttons ». Les QDialogs peuvent également afficher une « QSizeGrip » dans leur coin inférieur droit, à l’aide de la fonction « setSizeGripEnabled()».

Notez que QDialog (et tout autre widget de type Qt::Dialog) utilise le widget parent de manière légèrement différente des autres classes de Qt. Une boîte de dialogue est toujours un widget de niveau supérieur, mais si elle possède un parent, son emplacement par défaut est centré au-dessus du widget de niveau supérieur de ce parent (si elle n'est pas elle-même de niveau supérieur). Il partagera également l’entrée de la barre des tâches de son 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 indicateurs de fenêtre du widget dont le parent a été modifié ; l’utilisation de la fonction surchargée effacera les indicateurs de fenêtre spécifiant les propriétés du système de fenêtrage pour le widget (en particulier, elle réinitialisera l’indicateur ` Qt::Dialog `).

Remarque : la relation parent-enfant de la boîte de dialogue n’ implique pas que celle-ci sera toujours superposée à la fenêtre parente. Pour vous assurer que la boîte de dialogue reste toujours au premier plan, rendez-la modale. Cela s’applique également aux fenêtres enfants de la boîte de dialogue elle-même. Pour vous assurer que les fenêtres enfants de la boîte de dialogue restent au premier plan par rapport à celle-ci, rendez-les également modales.

Une boîte de dialogue modale est une boîte de dialogue qui bloque les interactions avec les autres fenêtres visibles de 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 d’application est ouverte, l’utilisateur doit terminer son interaction avec celle-ci et la fermer avant de pouvoir accéder à toute autre fenêtre de l’application. Les boîtes de dialogue modales de fenêtre bloquent uniquement 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 méthode la plus courante pour afficher une boîte de dialogue modale consiste à 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 restitué à l’appelant. Vous devez vous connecter au signal finished() pour savoir quand la boîte de dialogue est fermée et quelle 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, au slot accept(), et un bouton Annuler au slot reject(). Vous pouvez également appeler le slot 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’exécuter cette opération dans un thread de travail en arrière-plan, afin qu’elle n’interfère pas avec le thread de l’interface graphique.

Avertissement : 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 ne revient au fil d’interface graphique que lorsque la boîte de dialogue est fermée. Toutefois, 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 plateformes.

Boîtes de dialogue non modales

Une boîte de dialogue non modale est une boîte de dialogue qui fonctionne indépendamment des autres fenêtres de la même application. Les boîtes de dialogue « Rechercher et remplacer » des traitements de texte sont souvent non modales afin de 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 non modales s'affichent à l'aide de la fonction ` show()`, qui renvoie immédiatement le contrôle à l'appelant.

Si vous appelez la fonction ` show()` après avoir masqué une boîte de dialogue, celle-ci s'affichera à son emplacement d'origine. En effet, c'est le gestionnaire de fenêtres qui détermine la position des fenêtres qui n'ont pas été explicitement positionnées par le programmeur. Pour conserver la position d’une boîte de dialogue qui a été déplacée par l’utilisateur, enregistrez sa position dans votre gestionnaire d’ closeEvent() puis déplacez la boîte de dialogue à cette position avant de l’afficher à nouveau.

Bouton par défaut

Le bouton par défaut d’une boîte de dialogue est celui sur lequel l’utilisateur clique lorsqu’il appuie sur la touche Entrée (Retour). Ce bouton sert à indiquer que l’utilisateur accepte les paramètres de la boîte de dialogue et souhaite la fermer. Utilisez les fonctions 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 Échap

Si l’utilisateur appuie sur la touche Échap dans une boîte de dialogue, la fonction QDialog::reject() sera appelée. Cela provoquera la fermeture de la fenêtre : la fonction 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 général, une boîte de dialogue extensible s'affiche initialement sous forme de boîte de dialogue partielle, mais avec un bouton bascule « More ». Si l'utilisateur appuie sur le bouton « More », la boîte de dialogue s'agrandit.

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 requise, par exemple pour indiquer si l’utilisateur a cliqué sur « OK » ou « Cancel ». Une boîte de dialogue peut être fermée en appelant les slots ` accept()` ou ` reject()`, et la fonction ` exec()` renverra ` Accepted ` ou ` Rejected ` selon le cas. L'appel à ` exec()` renvoie le résultat de la boîte de dialogue. Ce résultat est également accessible via ` result()` si la boîte de dialogue n'a pas été détruite.

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 conserver 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 non modale :

void EditorWindow::find()
{
    if (!findDialog) {
        findDialog = new FindDialog(this);
        connect(findDialog, &FindDialog::findNext,
                this, &EditorWindow::findNext);
    }

    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}

Une boîte de 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 mise en page de la boîte de dialogue sur « SetFixedSize », celle-ci ne pourra pas être redimensionnée par l'utilisateur et se réduira automatiquement lorsque l'extension sera masquée.

Voir également QDialogButtonBox, QTabWidget, QWidget, QProgressDialog et l'exemple « Boîtes de dialogue standard ».

Documentation sur les types de membres

enum QDialog::DialogCode

Valeur renvoyée par une boîte de dialogue modale.

ConstanteValeur
QDialog::Accepted1
QDialog::Rejected0

Documentation de la propriété

Cette propriété détermine si la fonction ` show()` doit afficher la boîte de dialogue en mode modal ou non modal.

Par défaut, cette propriété est définie sur « false » et la méthode ` show()` affiche la boîte de dialogue en mode non modal. Définir cette propriété sur « true » revient à définir ` QWidget::windowModality ` sur « Qt::ApplicationModal ».

exec() ignore la valeur de cette propriété et affiche 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 redimensionnement est activée

Une poignée de redimensionnement ( 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 redimensionnement 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())

Crée une boîte de dialogue dont le parent est parent.

Une boîte de dialogue est toujours un widget de niveau supérieur, mais si elle possède un parent, son emplacement par défaut est centré au-dessus de celui-ci. Elle partagera également l'entrée de la barre des tâches de son parent.

Les indicateurs de widget f sont transmis au constructeur QWidget. Si, par exemple, vous ne souhaitez pas qu’un bouton « Qu’est-ce que c’est ? » apparaisse dans la barre de titre de la boîte de dialogue, transmettez Qt::WindowTitleHint | Qt::WindowSystemMenuHint à f.

Voir également ` QWidget::setWindowFlags()`.

[virtual noexcept] QDialog::~QDialog()

Détruit l'QDialog, en supprimant tous ses éléments enfants.

[virtual slot] void QDialog::accept()

Masque la boîte de dialogue modale et définit le code de résultat sur « Accepted ».

Voir également ` 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 à l'aide de hide() ou setVisible(false). Cela inclut la suppression de la boîte de dialogue alors qu'elle est visible.

Voir également 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 définit son code de résultat sur r. Le signal finished() émettra r; si r vaut 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()` provoque également la fin de la boucle d’événements locale, et ` exec()` renvoie ` r`.

Comme avec QWidget::close(), done() supprime la boîte de dialogue si le drapeau Qt::WA_DeleteOnClose est activé. Si la boîte de dialogue est le widget principal de l’application, celle-ci se termine. Si la boîte de dialogue est la dernière fenêtre fermée, le signal QGuiApplication::lastWindowClosed() est émis.

Voir également 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 en mode « modal dialog », bloquant l'application jusqu'à ce que l'utilisateur la ferme. La fonction renvoie un résultat de type « DialogCode ».

Si la boîte de dialogue est de type « application modal », les utilisateurs ne peuvent interagir avec aucune autre fenêtre de la même application tant qu’ils n’ont pas fermé la boîte de dialogue. Si la boîte de dialogue est de type « 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 au niveau de l’application.

Remarque : évitez d’utiliser cette fonction ; utilisez plutôt ` open()`. Contrairement à `exec()`, ` open()` est asynchrone et ne lance pas de boucle d’événements supplémentaire. Cela permet d’éviter l’apparition d’une série de bogues dangereux (par exemple, la suppression de la fenêtre parente de la boîte de dialogue alors que celle-ci est ouverte via `exec()`). Lorsque vous utilisez ` open()`, vous pouvez vous abonner au signal ` finished()` de ` QDialog ` pour être averti lorsque la boîte de dialogue est fermée.

Voir également 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 les fonctions done(), accept() ou reject().

Notez que ce signal n’ est pas émis lorsque la boîte de dialogue est masquée avec hide() ou setVisible(false). Cela inclut la suppression de la boîte de dialogue alors qu’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 pour la propriété : QWidget::minimumSizeHint.

[virtual slot] void QDialog::open()

Affiche la boîte de dialogue sous la forme d'un objet ` window modal dialog` et revient immédiatement.

Voir également exec(), show(), result() et setWindowModality().

[virtual slot] void QDialog::reject()

Masque la boîte de dialogue modale et définit le code de résultat sur « Rejected ».

Voir également accept() et done().

[signal] void QDialog::rejected()

Ce signal est émis lorsque la boîte de dialogue a été fermée, soit par l'utilisateur, soit en appelant les fonctions ` reject()` ou ` done()` avec l'argument ` QDialog::Rejected `.

Notez que ce signal n' est pas émis lorsque la boîte de dialogue est masquée à l'aide de ` hide()` ou ` setVisible(false)`. Cela inclut la suppression de la boîte de dialogue alors qu'elle est visible.

Voir également 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, cette méthode 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 de type « QMessageBox », la valeur renvoyée correspond à une valeur de l’énumération « QMessageBox::StandardButton ».

N’appelez pas cette fonction si la boîte de dialogue a été créée avec l’attribut ` Qt::WA_DeleteOnClose `.

Voir également setResult().

void QDialog::setResult(int i)

Définit le code de résultat de la boîte de dialogue modale sur i.

Remarque : nous vous recommandons d'utiliser l'une des valeurs définies par QDialog::DialogCode.

Voir également result().

[override virtual] void QDialog::setVisible(bool visible)

Réimplémente une fonction d'accès pour 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 pour 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.