QDialog Class
Die Klasse QDialog ist die Basisklasse für Dialogfenster. Mehr...
Kopfzeile: | #include <QDialog> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Vererbt: | QWidget |
Vererbt von: | QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, und 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) |
Reimplementierte ö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
Reimplementierte 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 |
Detaillierte Beschreibung
Ein Dialogfenster ist ein Fenster der obersten Ebene, das hauptsächlich für kurzfristige Aufgaben und kurze Kommunikation mit dem Benutzer verwendet wird. QDialogs können modal oder modeless sein. QDialogs können ein return value zur Verfügung stellen, und sie können default buttons haben. QDialogs können auch ein QSizeGrip in ihrer unteren rechten Ecke haben, indem sie setSizeGripEnabled() verwenden.
Beachten Sie, dass QDialog (und jedes andere Widget mit dem Typ Qt::Dialog
) das übergeordnete Widget etwas anders als andere Klassen in Qt verwendet. Ein Dialog ist immer ein Widget der obersten Ebene, aber wenn es ein übergeordnetes Widget hat, ist seine Standardposition über dem übergeordneten Widget zentriert (wenn es nicht selbst die oberste Ebene ist). Es wird auch den Taskleisteneintrag des Elternteils teilen.
Verwenden Sie die Überladung der Funktion QWidget::setParent(), um die Eigentümerschaft eines QDialog-Widgets zu ändern. Diese Funktion erlaubt es Ihnen, die Fensterflags des reparierten Widgets explizit zu setzen; die Verwendung der überladenen Funktion löscht die Fensterflags, die die Fenstersystemeigenschaften für das Widget spezifizieren (insbesondere wird das Qt::Dialog Flag zurückgesetzt).
Hinweis: Die übergeordnete Beziehung des Dialogs bedeutet nicht, dass der Dialog immer über dem übergeordneten Fenster gestapelt wird. Um sicherzustellen, dass der Dialog immer oben liegt, machen Sie den Dialog modal. Dies gilt auch für Kindfenster des Dialogs selbst. Um sicherzustellen, dass die untergeordneten 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 in derselben Anwendung blockiert. Dialoge, die dazu dienen, einen Dateinamen vom Benutzer anzufordern oder Anwendungseinstellungen vorzunehmen, sind normalerweise modal. Dialoge können application modal (die Standardeinstellung) oder window modal sein.
Wenn ein modales Dialogfeld geöffnet wird, muss der Benutzer die Interaktion mit dem Dialogfeld beenden und es schließen, bevor er auf ein anderes Fenster in der Anwendung zugreifen kann. Modale Fensterdialoge blockieren nur den Zugriff auf das mit dem Dialog verknüpfte Fenster, so dass der Benutzer weiterhin andere Fenster in einer Anwendung verwenden kann.
Die häufigste Art, ein modales Dialogfeld anzuzeigen, ist der Aufruf der Funktion open(). Alternativ können Sie auch setModal(true) oder setWindowModality() und dann show() aufrufen. In beiden Fällen wird die Kontrolle sofort an den Aufrufer zurückgegeben, sobald das Dialogfeld angezeigt wird. Sie müssen eine Verbindung mit dem Signal finished() herstellen, um zu erfahren, wann das Dialogfeld geschlossen wird und wie sein return value lautet. Alternativ können Sie auch eine Verbindung zu den Signalen accepted() und rejected() herstellen.
Wenn Sie ein benutzerdefiniertes Dialogfeld implementieren, um das Dialogfeld zu schließen und einen entsprechenden Wert zurückzugeben, verbinden Sie eine Standardschaltfläche, z. B. eine OK-Schaltfläche, mit dem Slot accept() und eine Abbrechen-Schaltfläche mit dem Slot reject(). Alternativ können Sie den Slot done() auch mit Accepted
oder Rejected
aufrufen.
Wenn Sie das modale Dialogfeld anzeigen, um einen langwierigen Vorgang auszuführen, empfiehlt es sich, den Vorgang in einem Worker-Thread im Hintergrund auszuführen, damit er den GUI-Thread nicht beeinträchtigt.
Warnung: Bei der Verwendung von open() oder show() sollte der modale Dialog nicht auf dem Stack erstellt werden, damit er nicht zerstört wird, sobald die Kontrolle zum Aufrufer zurückkehrt.
Hinweis: Es gibt eine Möglichkeit, einen modalen Dialog in einem blockierenden Modus anzuzeigen, indem man exec() aufruft. In diesem Fall kehrt das Steuerelement erst dann an den 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.
Modellfreie Dialoge
Ein modellloser Dialog ist ein Dialog, der unabhängig von anderen Fenstern in derselben Anwendung funktioniert. Dialoge zum Suchen und Ersetzen in Textverarbeitungsprogrammen sind oft modelllos, damit der Benutzer sowohl mit dem Hauptfenster der Anwendung als auch mit dem Dialog interagieren kann.
Modeless-Dialoge werden mit show() angezeigt, das die Kontrolle sofort an den Aufrufer zurückgibt.
Wenn Sie die Funktion show() aufrufen, nachdem Sie einen Dialog ausgeblendet haben, wird der Dialog an seiner ursprünglichen Position angezeigt. Dies liegt daran, dass der Fenstermanager die Position für Fenster bestimmt, die nicht explizit vom Programmierer platziert wurden. Um die Position eines vom Benutzer verschobenen Dialogs beizubehalten, speichern Sie seine Position in Ihrem closeEvent()-Handler und verschieben Sie den Dialog dann an diese Position, bevor Sie ihn wieder einblenden.
Standard-Schaltfläche
Die Standardschaltfläche eines Dialogs ist die Schaltfläche, die gedrückt wird, wenn der Benutzer die Eingabetaste (Return) drückt. Diese Schaltfläche wird verwendet, um zu signalisieren, dass der Benutzer die Einstellungen des Dialogs akzeptiert und den Dialog schließen möchte. Verwenden Sie QPushButton::setDefault(), QPushButton::isDefault() und QPushButton::autoDefault(), um die Standardschaltfläche des Dialogs festzulegen und zu steuern.
Escape-Taste
Wenn der Benutzer in einem Dialog die Esc-Taste drückt, wird QDialog::reject() aufgerufen. Dies führt zum Schließen des Fensters: Die close event kann nicht ignored sein.
Erweiterbarkeit
Unter Erweiterbarkeit versteht man die Möglichkeit, das Dialogfeld auf zwei Arten darzustellen: als partielles Dialogfeld, das die am häufigsten verwendeten Optionen anzeigt, und als vollständiges Dialogfeld, das alle Optionen anzeigt. In der Regel wird ein erweiterbarer Dialog zunächst als Teildialog angezeigt, jedoch mit einer Umschalttaste More. Wenn der Benutzer die Schaltfläche More drückt, wird das Dialogfeld erweitert.
Rückgabewert (Modale Dialoge)
Modale Dialoge werden oft in Situationen verwendet, in denen ein Rückgabewert erforderlich ist, z. B. um anzuzeigen, ob der Benutzer OK oder Cancel gedrückt hat. Ein Dialog kann durch den Aufruf der Slots accept() oder reject() geschlossen werden, und exec() gibt Accepted
oder Rejected
zurück, je nachdem. Der Aufruf exec() gibt das Ergebnis des Dialogs zurück. Das Ergebnis ist auch von result() verfügbar, wenn der Dialog nicht zerstört wurde.
Um das Schließverhalten Ihres Dialogs zu ändern, 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 um das standardmäßige Schließ- oder Ablehnungsverhalten außer Kraft zu setzen.
Code-Beispiele
Ein modaler Dialog:
void EditorWindow::countWords() { WordCountDialog dialog(this); dialog.setWordCount(document().wordCount()); dialog.exec(); }
Ein modellloser 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);
Wenn Sie die Eigenschaft sizeConstraint des Dialoglayouts auf SetFixedSize setzen, kann die Größe des Dialogs vom Benutzer nicht geändert werden und wird automatisch verkleinert, wenn die Erweiterung ausgeblendet wird.
Siehe auch QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, und Standarddialoge Beispiel.
Dokumentation der Mitgliedstypen
enum QDialog::DialogCode
Der von einem modalen Dialog zurückgegebene Wert.
Konstante | Wert |
---|---|
QDialog::Accepted | 1 |
QDialog::Rejected | 0 |
Eigenschaft Dokumentation
modal : bool
Diese Eigenschaft legt fest, ob show() den Dialog als modalen oder modelllosen Dialog öffnen soll.
Standardmäßig ist diese Eigenschaft false
und show() öffnet das Dialogfeld als modal. Wenn Sie diese Eigenschaft auf true setzen, entspricht dies der Einstellung von QWidget::windowModality auf Qt::ApplicationModal.
exec() ignoriert den Wert dieser Eigenschaft und öffnet den Dialog immer als modalen Dialog.
Zugriffsfunktionen:
bool | isModal() const |
void | setModal(bool modal) |
Siehe auch QWidget::windowModality, show(), und exec().
sizeGripEnabled : bool
Diese Eigenschaft gibt an, ob der Größengriff aktiviert ist
Wenn diese Eigenschaft aktiviert ist, wird in der unteren rechten Ecke des Dialogfelds ein QSizeGrip angezeigt. Standardmäßig ist der Größengriff deaktiviert.
Zugriffsfunktionen:
bool | isSizeGripEnabled() const |
void | setSizeGripEnabled(bool) |
Dokumentation der Mitgliedsfunktionen
[explicit]
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Konstruiert ein Dialogfeld mit dem übergeordneten Element parent.
Ein Dialogfeld ist immer ein Widget der obersten Ebene, aber wenn es ein übergeordnetes Element hat, wird es standardmäßig über dem übergeordneten Element zentriert. Es wird auch den Taskleisteneintrag des Elternteils teilen.
Die Widget-Flags f werden an den QWidget Konstruktor weitergegeben. Wenn Sie z. B. keine Schaltfläche "Was ist das?" in der Titelleiste des Dialogs wünschen, übergeben Sie Qt::WindowTitleHint | Qt::WindowSystemMenuHint in f.
Siehe auch QWidget::setWindowFlags().
[virtual noexcept]
QDialog::~QDialog()
Zerstört die Seite QDialog und löscht dabei alle untergeordneten Seiten.
[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 ausgegeben, wenn der Dialog entweder vom Benutzer oder durch den Aufruf von accept() oder done() mit dem Argument QDialog::Accepted akzeptiert wurde.
Beachten Sie, dass dieses Signal nicht ausgegeben wird, wenn das Dialogfeld mit hide() oder setVisible(false) ausgeblendet wird. Dies schließt das Löschen des Dialogs ein, während er sichtbar ist.
Siehe auch finished() und rejected().
[override virtual protected]
void QDialog::closeEvent(QCloseEvent *e)
Reimplements: QWidget::closeEvent(QCloseEvent *event).
[override virtual protected]
void QDialog::contextMenuEvent(QContextMenuEvent *e)
Reimplements: QWidget::contextMenuEvent(QContextMenuEvent *event).
[virtual slot]
void QDialog::done(int r)
Schließt den Dialog und setzt seinen Ergebniscode auf r. Das Signal finished() gibt r aus; wenn r QDialog::Accepted oder QDialog::Rejected ist, werden auch die Signale accepted() oder rejected() ausgegeben.
Wenn dieser Dialog mit exec() angezeigt wird, führt done() auch dazu, dass die lokale Ereignisschleife beendet wird und exec() r zurückgibt.
Wie bei QWidget::close() löscht done() den Dialog, wenn das Flag Qt::WA_DeleteOnClose gesetzt ist. Wenn das Dialogfeld das Hauptwidget der Anwendung ist, wird die Anwendung beendet. Wenn das Dialogfeld das letzte geschlossene Fenster ist, wird das Signal QGuiApplication::lastWindowClosed() ausgegeben.
Siehe auch accept(), reject(), QApplication::activeWindow(), und QCoreApplication::quit().
[override virtual protected]
bool QDialog::eventFilter(QObject *o, QEvent *e)
Reimplements: QObject::eventFilter(QObject *watched, QEvent *event).
[virtual slot]
int QDialog::exec()
Zeigt den Dialog als modal dialog an und blockiert, bis der Benutzer ihn schließt. Die Funktion gibt ein DialogCode Ergebnis zurück.
Wenn das Dialogfeld application modal ist, kann der Benutzer mit keinem anderen Fenster in derselben Anwendung interagieren, bis er das Dialogfeld schließt. Wenn das Dialogfeld window modal ist, wird nur die Interaktion mit dem übergeordneten Fenster blockiert, solange das Dialogfeld geöffnet ist. Standardmäßig ist das Dialogfeld anwendungsmodal.
Hinweis: Vermeiden Sie die Verwendung dieser Funktion; verwenden Sie stattdessen open()
. Im Gegensatz zu exec() ist open() asynchron und spinnt keine zusätzliche Ereignisschleife. Dies verhindert eine Reihe von gefährlichen Fehlern (z. B. das Löschen des übergeordneten Dialogs, während der Dialog über exec() geöffnet ist). Wenn Sie open() verwenden, können Sie sich mit dem Signal finished() von QDialog verbinden, 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 ausgegeben, wenn der Code result des Dialogs gesetzt wurde, entweder durch den Benutzer oder durch den Aufruf von done(), accept() oder reject().
Beachten Sie, dass dieses Signal nicht ausgegeben wird, wenn das Dialogfeld mit hide() oder setVisible(false) ausgeblendet wird. Dies schließt das Löschen des Dialogs ein, während er sichtbar ist.
Siehe auch accepted() und rejected().
[override virtual protected]
void QDialog::keyPressEvent(QKeyEvent *e)
Reimplements: QWidget::keyPressEvent(QKeyEvent *event).
[override virtual]
QSize QDialog::minimumSizeHint() const
Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::minimumSizeHint.
[virtual slot]
void QDialog::open()
Zeigt den Dialog 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 ausgegeben, wenn der Dialog entweder vom Benutzer oder durch den Aufruf von reject() oder done() mit dem Argument QDialog::Rejected abgelehnt wurde.
Beachten Sie, dass dieses Signal nicht ausgegeben wird, wenn der Dialog mit hide() oder setVisible(false) ausgeblendet wird. Dies schließt das Löschen des Dialogs ein, während er sichtbar ist.
Siehe auch finished() und accepted().
[override virtual protected]
void QDialog::resizeEvent(QResizeEvent *)
Reimplements: QWidget::resizeEvent(QResizeEvent *event).
int QDialog::result() const
Gibt im Allgemeinen den Ergebniscode des modalen Dialogs zurück, Accepted
oder Rejected
.
Hinweis: Wenn diese Funktion mit einer QMessageBox Instanz aufgerufen wird, ist der zurückgegebene Wert ein Wert des QMessageBox::StandardButton enum.
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 Dialogs auf i.
Hinweis: Es wird empfohlen, einen der in QDialog::DialogCode definierten Werte zu verwenden.
Siehe auch result().
[override virtual]
void QDialog::setVisible(bool visible)
Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::visible.
[override virtual protected]
void QDialog::showEvent(QShowEvent *event)
Reimplements: QWidget::showEvent(QShowEvent *event).
[override virtual]
QSize QDialog::sizeHint() const
Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::sizeHint.
© 2025 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.