QDialog Class
Die Klasse „QDialog“ ist die Basisklasse für Dialogfenster. Mehr...
| Header: | #include <QDialog> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt von: | QWidget |
| Vererbt an: | QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog sowie QWizard |
Öffentliche Typen
| enum | DialogCode { Accepted, Rejected } |
Eigenschaften
- modal : bool
- sizeGripEnabled : bool
Öffentliche Funktionen
| 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) |
Neu implementierte öffentliche Funktionen
| virtual QSize | minimumSizeHint() const override |
| virtual void | setVisible(bool visible) override |
| virtual QSize | sizeHint() const override |
Öffentliche Slots
| virtual void | accept() |
| virtual void | done(int r) |
| virtual int | exec() |
| virtual void | open() |
| virtual void | reject() |
Signale
Neu implementierte geschützte Funktionen
| 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 |
Ausführliche Beschreibung
Ein Dialogfenster ist ein Fenster der obersten Ebene, das hauptsächlich für kurzfristige Aufgaben und kurze Interaktionen mit dem Benutzer verwendet wird. QDialogs können modal oder modelos sein. QDialogs können einen „ return value “ bereitstellen und über „ default buttons “ verfügen. QDialogs können außerdem in ihrer rechten unteren Ecke einen „ QSizeGrip “ anzeigen, der mit „ setSizeGripEnabled()“ aufgerufen wird.
Beachten Sie, dass QDialog (und jedes andere Widget vom Typ „ Qt::Dialog “) das übergeordnete Widget etwas anders verwendet als andere Klassen in Qt. Ein Dialog ist immer ein Widget der obersten Ebene, aber wenn er ein übergeordnetes Widget hat, wird er standardmäßig zentriert über dem Widget der obersten Ebene des übergeordneten Widgets platziert (sofern er nicht selbst ein Widget der obersten Ebene ist). Außerdem nutzt es den Taskleisten-Eintrag des übergeordneten Widgets mit.
Verwenden Sie die Überladung der Funktion ` QWidget::setParent()` (), um die Eigentümerschaft eines `QDialog`-Widgets zu ändern. Mit dieser Funktion können Sie die Fensterflags des Widgets, dessen übergeordnetes Widget geändert wird, explizit festlegen; durch die Verwendung der überladenen Funktion werden die Fensterflags gelöscht, die die Fenstersystem-Eigenschaften für das Widget festlegen (insbesondere wird das Flag ` Qt::Dialog ` zurückgesetzt).
Hinweis: Die Eltern-Kind-Beziehung des Dialogs bedeutet nicht, dass der Dialog immer über dem übergeordneten Fenster angezeigt wird. Um sicherzustellen, dass der Dialog immer im Vordergrund bleibt, machen Sie den Dialog modal. Dies gilt auch für untergeordnete Fenster des Dialogs selbst. Um sicherzustellen, dass untergeordnete Fenster des Dialogs über dem Dialog bleiben, machen Sie die untergeordneten Fenster ebenfalls modal.
Modale Dialoge
Ein modaler Dialog ist ein Dialog, der die Eingabe in andere sichtbare Fenster derselben Anwendung blockiert. Dialoge, die dazu dienen, einen Dateinamen vom Benutzer abzufragen oder Anwendungseinstellungen festzulegen, sind in der Regel modal. Dialoge können „ application modal “ (Standard) oder „ window modal “ sein.
Wenn ein modaler Anwendungsdialog geöffnet wird, muss der Benutzer die Interaktion mit dem Dialog abschließen und diesen schließen, bevor er auf andere Fenster der Anwendung zugreifen kann. Modale Fensterdialoge blockieren nur den Zugriff auf das mit dem Dialog verknüpfte Fenster, sodass der Benutzer andere Fenster der Anwendung weiterhin nutzen kann.
Die gängigste Methode zum Anzeigen eines modalen Dialogs ist der Aufruf der Funktion „ open()“. Alternativ können Sie „ setModal(true)“ oder „ setWindowModality()“ aufrufen und anschließend „ show()“. In beiden Fällen wird die Steuerung sofort an den Aufrufer zurückgegeben, sobald der Dialog angezeigt wird. Sie müssen eine Verbindung zum Signal „ finished()“ herstellen, um zu erfahren, wann der Dialog geschlossen wird und welchen Wert „ return value “ annimmt. Alternativ können Sie eine Verbindung zu den Signalen „ accepted()“ und „ rejected()“ herstellen.
Um bei der Implementierung eines benutzerdefinierten Dialogs diesen zu schließen und einen entsprechenden Wert zurückzugeben, verbinden Sie eine Standardschaltfläche – beispielsweise eine „OK“-Schaltfläche – mit dem Slot „ accept()“ und eine „Abbrechen“-Schaltfläche mit dem Slot „ reject()“. Alternativ können Sie den Slot „ done()“ mit „ Accepted “ oder „ Rejected “ aufrufen.
Wenn Sie den modalen Dialog anzeigen, um einen lang andauernden Vorgang auszuführen, wird empfohlen, diesen Vorgang in einem Hintergrund-Worker-Thread auszuführen, damit der GUI-Thread nicht beeinträchtigt wird.
Warnung: Bei Verwendung von „ open()“ oder „ show()“ sollte der modale Dialog nicht auf dem Stack erstellt werden, damit er nicht zerstört wird, sobald die Steuerung an den Aufrufer zurückkehrt.
Hinweis: Es gibt eine Möglichkeit, einen modalen Dialog im blockierenden Modus anzuzeigen, indem man ` exec()` aufruft. In diesem Fall kehrt das Steuerelement erst dann zum GUI-Thread zurück, wenn der Dialog geschlossen wird. Von diesem Ansatz wird jedoch abgeraten, da er eine verschachtelte Ereignisschleife erzeugt, die von einigen Plattformen nicht vollständig unterstützt wird.
Moduslose Dialoge
Ein modelloser Dialog ist ein Dialog, der unabhängig von anderen Fenstern derselben Anwendung arbeitet. Such- und Ersetzungsdialoge in Textverarbeitungsprogrammen sind oft modellos, damit der Benutzer sowohl mit dem Hauptfenster der Anwendung als auch mit dem Dialog interagieren kann.
Modeless-Dialogfelder werden mit der Funktion ` show()` angezeigt, die die Kontrolle sofort an den Aufrufer zurückgibt.
Wenn Sie die Funktion ` show()` aufrufen, nachdem Sie ein Dialogfeld ausgeblendet haben, wird das Dialogfeld an seiner ursprünglichen Position angezeigt. Dies liegt daran, dass der Fenstermanager die Position für Fenster festlegt, die nicht explizit vom Programmierer platziert wurden. Um die Position eines vom Benutzer verschobenen Dialogfelds beizubehalten, speichern Sie dessen Position in Ihrem ` closeEvent()`-Handler und verschieben Sie das Dialogfeld dann an diese Position, bevor Sie es erneut anzeigen.
Standardschaltfläche
Die Standardschaltfläche eines Dialogfelds ist die Schaltfläche, die gedrückt wird, wenn der Benutzer die Eingabetaste (Return) drückt. Diese Schaltfläche dient dazu, anzuzeigen, dass der Benutzer die Einstellungen des Dialogfelds akzeptiert und das Dialogfeld schließen möchte. Verwenden Sie die Funktionen „ QPushButton::setDefault()“, „ QPushButton::isDefault()“ und „ QPushButton::autoDefault()“, um die Standardschaltfläche des Dialogfelds festzulegen und zu steuern.
Esc-Taste
Wenn der Benutzer in einem Dialogfeld die Esc-Taste drückt, wird ` QDialog::reject()` aufgerufen. Dadurch wird das Fenster geschlossen: Die ` close event ` darf nicht ` ignored` sein.
Erweiterbarkeit
Erweiterbarkeit bezeichnet die Möglichkeit, den Dialog auf zwei Arten anzuzeigen: als Teildialog, der die am häufigsten verwendeten Optionen anzeigt, und als Vollbilddialog, der alle Optionen anzeigt. In der Regel wird ein erweiterbarer Dialog zunächst als Teildialog angezeigt, jedoch mit einer Umschaltfläche „ More “. Wenn der Benutzer die Schaltfläche „ More “ betätigt, wird der Dialog erweitert.
Rückgabewert (modale Dialoge)
Modale Dialoge werden häufig in Situationen verwendet, in denen ein Rückgabewert erforderlich ist, z. B. um anzugeben, ob der Benutzer auf „ OK “ oder „ Cancel “ geklickt hat. Ein Dialog kann durch Aufruf der Slots „ accept()“ oder „ reject()“ geschlossen werden, und „ exec()“ gibt je nach Fall „ Accepted “ oder „ Rejected “ zurück. Der Aufruf von ` exec()` gibt das Ergebnis des Dialogs zurück. Das Ergebnis ist auch über ` result()` abrufbar, sofern der Dialog nicht zerstört wurde.
Um das Schließverhalten Ihres Dialogs anzupassen, können Sie die Funktionen „ accept()“, „ reject()“ oder „ done()“ neu implementieren. Die Funktion „ closeEvent()“ sollte nur neu implementiert werden, um die Position des Dialogs beizubehalten oder das Standardverhalten beim Schließen oder Ablehnen zu überschreiben.
Code-Beispiele
Ein modaler Dialog:
void EditorWindow::countWords()
{
WordCountDialog dialog(this);
dialog.setWordCount(document().wordCount());
dialog.exec();
}Ein nicht-modaler Dialog:
void EditorWindow::find()
{
if (!findDialog) {
findDialog = new FindDialog(this);
connect(findDialog, &FindDialog::findNext,
this, &EditorWindow::findNext);
}
findDialog->show();
findDialog->raise();
findDialog->activateWindow();
}Ein Dialog mit einer Erweiterung:
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);Indem Sie die Eigenschaft „ sizeConstraint “ des Layouts des Dialogfelds auf „ SetFixedSize “ setzen, kann das Dialogfeld vom Benutzer nicht in der Größe verändert werden und wird automatisch verkleinert, wenn die Erweiterung ausgeblendet wird.
Siehe auch „ QDialogButtonBox“ , „ QTabWidget “, „ QWidget “, „ QProgressDialog “ und das Beispiel „Standarddialoge“.
Dokumentation zu Mitgliedstypen
enum QDialog::DialogCode
Der von einem modalen Dialogfeld zurückgegebene Wert.
| Konstante | Wert |
|---|---|
QDialog::Accepted | 1 |
QDialog::Rejected | 0 |
Eigenschaftsdokumentation
modal : bool
Diese Eigenschaft legt fest, ob show() den Dialog modal oder modelos anzeigen soll
Standardmäßig ist diese Eigenschaft auf „ false “ gesetzt, und „ show()“ öffnet das Dialogfeld als nicht-modal. Das Setzen dieser Eigenschaft auf „true“ entspricht dem Setzen von „ QWidget::windowModality “ auf „ Qt::ApplicationModal “.
exec() ignoriert den Wert dieser Eigenschaft und zeigt den Dialog immer modal an.
Zugriffsfunktionen:
| bool | isModal() const |
| void | setModal(bool modal) |
Siehe auch „ QWidget::windowModality“ , „ show()“ und „ exec()“.
sizeGripEnabled : bool
Diese Eigenschaft legt fest, ob der Größen-Zuggriff aktiviert ist
Wenn diese Eigenschaft aktiviert ist, wird in der unteren rechten Ecke des Dialogfelds ein Größen- QSizeGrip us angezeigt. Standardmäßig ist der Größen- us deaktiviert.
Zugriffsfunktionen:
| bool | isSizeGripEnabled() const |
| void | setSizeGripEnabled(bool) |
Dokumentation zu den Member-Funktionen
[explicit] QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Erstellt ein Dialogfeld mit dem übergeordneten Element „ parent “.
Ein Dialog ist immer ein Widget der obersten Ebene, aber wenn er ein übergeordnetes Element hat, wird er standardmäßig zentriert über dem übergeordneten Element positioniert. Außerdem teilt er sich den Taskleisten-Eintrag des übergeordneten Elements.
Die Widget-Flags ` f ` werden an den Konstruktor ` QWidget ` weitergegeben. Wenn Sie beispielsweise keine „Was ist das?“-Schaltfläche in der Titelleiste des Dialogs wünschen, übergeben Sie ` Qt::WindowTitleHint ` | ` Qt::WindowSystemMenuHint ` an ` f`.
Siehe auch ` QWidget::setWindowFlags()`.
[virtual noexcept] QDialog::~QDialog()
Löscht das „ QDialog “ und entfernt dabei alle untergeordneten Elemente.
[virtual slot] void QDialog::accept()
Blendet den modalen Dialog aus und setzt den Ergebniscode auf „ Accepted “.
Siehe auch „ reject()“ und „ done()“.
[signal] void QDialog::accepted()
Dieses Signal wird ausgelöst, wenn der Dialog entweder vom Benutzer akzeptiert wurde oder durch den Aufruf von ` accept()` oder ` done()` mit dem Argument ` QDialog::Accepted `.
Beachten Sie, dass dieses Signal nicht ausgelöst wird, wenn der Dialog mit ` hide()` oder ` setVisible(false)` ausgeblendet wird. Dies gilt auch für das Löschen des Dialogs, während er sichtbar ist.
Siehe auch „ finished()“ und „ rejected()“.
[override virtual protected] void QDialog::closeEvent(QCloseEvent *e)
Umsetzt: ` QWidget::closeEvent(QCloseEvent *event)`.
[override virtual protected] void QDialog::contextMenuEvent(QContextMenuEvent *e)
Implementiert: ` QWidget::contextMenuEvent` (`QContextMenuEvent *event`).
[virtual slot] void QDialog::done(int r)
Schließt das Dialogfeld und setzt dessen Ergebniscode auf „ r “. Das Signal „ finished()“ löst „ r “ aus; wenn „ r “ auf „ QDialog::Accepted “ oder „ QDialog::Rejected “ gesetzt ist, werden zusätzlich jeweils die Signale „ accepted()“ bzw. „ rejected()“ ausgelöst.
Wird dieser Dialog mit ` exec()` angezeigt, bewirkt `done()` zudem, dass die lokale Ereignisschleife beendet wird und ` exec()` den Wert ` r` zurückgibt.
Wie bei ` QWidget::close()` löscht `done()` das Dialogfeld, wenn das Flag ` Qt::WA_DeleteOnClose ` gesetzt ist. Ist das Dialogfeld das Haupt-Widget der Anwendung, wird die Anwendung beendet. Ist das Dialogfeld das zuletzt geschlossene Fenster, wird das Signal ` QGuiApplication::lastWindowClosed()` ausgelöst.
Siehe auch „ accept()“, „ reject()“, „ QApplication::activeWindow()“ und „ QCoreApplication::quit()“.
[override virtual protected] bool QDialog::eventFilter(QObject *o, QEvent *e)
Implementiert neu: ` QObject::eventFilter` (`QObject *watched, QEvent *event`).
[virtual slot] int QDialog::exec()
Zeigt das Dialogfeld als „ modal dialog “ an und blockiert die Ausführung, bis der Benutzer es schließt. Die Funktion gibt ein „ DialogCode “-Ergebnis zurück.
Ist der Dialog „ application modal “, können Benutzer mit keinem anderen Fenster derselben Anwendung interagieren, bis sie den Dialog schließen. Ist der Dialog „ window modal “, wird nur die Interaktion mit dem übergeordneten Fenster blockiert, solange der Dialog geöffnet ist. Standardmäßig ist der Dialog anwendungsmodal.
Hinweis: Vermeiden Sie die Verwendung dieser Funktion; verwenden Sie stattdessen ` open()`. Im Gegensatz zu `exec()` ist ` open()` asynchron und startet keine zusätzliche Ereignisschleife. Dies verhindert das Auftreten einer Reihe gefährlicher Fehler (z. B. das Löschen des übergeordneten Fensters des Dialogs, während der Dialog über `exec()` geöffnet ist). Bei Verwendung von ` open()` können Sie sich an das Signal ` finished()` von ` QDialog ` anhängen, um benachrichtigt zu werden, wenn der Dialog geschlossen wird.
Siehe auch ` open()`, ` show()`, ` result()` und ` setWindowModality()`.
[signal] void QDialog::finished(int result)
Dieses Signal wird ausgelöst, wenn der Code „ result “ des Dialogfelds gesetzt wurde – entweder durch den Benutzer oder durch den Aufruf von ` done()`, ` accept()` oder ` reject()`.
Beachten Sie, dass dieses Signal nicht ausgelöst wird, wenn der Dialog mit ` hide()` oder ` setVisible(false)` ausgeblendet wird. Dies gilt auch für das Löschen des Dialogs, während er sichtbar ist.
Siehe auch accepted() und rejected().
[override virtual protected] void QDialog::keyPressEvent(QKeyEvent *e)
Implementiert: ` QWidget::keyPressEvent(QKeyEvent *event)`.
[override virtual] QSize QDialog::minimumSizeHint() const
Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::minimumSizeHint “ neu.
[virtual slot] void QDialog::open()
Zeigt das Dialogfeld als „ window modal dialog “ an und kehrt sofort zurück.
Siehe auch exec(), show(), result() und setWindowModality().
[virtual slot] void QDialog::reject()
Blendet den modalen Dialog aus und setzt den Ergebniscode auf „ Rejected “.
Siehe auch „ accept()“ und „ done()“.
[signal] void QDialog::rejected()
Dieses Signal wird ausgelöst, wenn der Dialog entweder vom Benutzer oder durch den Aufruf von ` reject()` oder ` done()` mit dem Argument ` QDialog::Rejected ` geschlossen wurde.
Beachten Sie, dass dieses Signal nicht ausgelöst wird, wenn der Dialog mit ` hide()` oder ` setVisible(false)` ausgeblendet wird. Dies gilt auch für das Löschen des Dialogs, während er sichtbar ist.
Siehe auch „ finished()“ und „ accepted()“.
[override virtual protected] void QDialog::resizeEvent(QResizeEvent *)
Implementiert: QWidget::resizeEvent(QResizeEvent *event).
int QDialog::result() const
Gibt im Allgemeinen den Ergebniscode des modalen Dialogfelds zurück: „ Accepted “ oder „ Rejected “.
Hinweis: Bei Aufruf auf eine „ QMessageBox “-Instanz ist der Rückgabewert ein Wert der Enumeration „ QMessageBox::StandardButton “.
Rufen Sie diese Funktion nicht auf, wenn der Dialog mit dem Attribut „ Qt::WA_DeleteOnClose “ erstellt wurde.
Siehe auch „ setResult()“.
void QDialog::setResult(int i)
Setzt den Ergebniscode des modalen Dialogfelds auf „ i “.
Hinweis: Wir empfehlen, einen der in „ QDialog::DialogCode “ definierten Werte zu verwenden.
Siehe auch ` result()`.
[override virtual] void QDialog::setVisible(bool visible)
Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::visible “ neu.
[override virtual protected] void QDialog::showEvent(QShowEvent *event)
Implementiert: ` QWidget::showEvent` (`QShowEvent *event`).
[override virtual] QSize QDialog::sizeHint() const
Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::sizeHint “ neu.
© 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.