Auf dieser Seite

QProgressDialog Class

Die Klasse „QProgressDialog“ liefert Rückmeldung zum Fortschritt eines langwierigen Vorgangs. Mehr...

Header: #include <QProgressDialog>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Erbt von: QDialog

Eigenschaften

Öffentliche Funktionen

QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QProgressDialog()
bool autoClose() const
bool autoReset() const
QString labelText() const
int maximum() const
int minimum() const
int minimumDuration() const
void open(QObject *receiver, const char *member)
void setAutoClose(bool close)
void setAutoReset(bool reset)
void setBar(QProgressBar *bar)
void setCancelButton(QPushButton *cancelButton)
void setLabel(QLabel *label)
int value() const
bool wasCanceled() const

Neu implementierte öffentliche Funktionen

virtual QSize sizeHint() const override

Öffentliche Slots

void cancel()
void reset()
void setCancelButtonText(const QString &cancelButtonText)
void setLabelText(const QString &text)
void setMaximum(int maximum)
void setMinimum(int minimum)
void setMinimumDuration(int ms)
void setRange(int minimum, int maximum)
void setValue(int progress)

Signale

void canceled()

Neu implementierte geschützte Funktionen

virtual void changeEvent(QEvent *ev) override
virtual void closeEvent(QCloseEvent *e) override
virtual void resizeEvent(QResizeEvent *event) override
virtual void showEvent(QShowEvent *e) override

Geschützte Slots

void forceShow()

Ausführliche Beschreibung

Ein Fortschrittsdialog dient dazu, dem Benutzer einen Hinweis darauf zu geben, wie lange ein Vorgang dauern wird, und zu zeigen, dass die Anwendung nicht eingefroren ist. Er kann dem Benutzer auch die Möglichkeit bieten, den Vorgang abzubrechen.

Ein häufiges Problem bei Fortschrittsdialogen ist, dass es schwierig ist zu wissen, wann man sie einsetzen soll; Vorgänge dauern auf unterschiedlicher Hardware unterschiedlich lange. QProgressDialog bietet eine Lösung für dieses Problem: Es schätzt die Dauer des Vorgangs (basierend auf der Zeit pro Schritt) und wird nur angezeigt, wenn diese geschätzte Dauer minimumDuration() (standardmäßig 4 Sekunden) überschreitet.

Verwenden Sie ` setMinimum()` und ` setMaximum()` oder den Konstruktor, um die Anzahl der „Schritte“ im Vorgang festzulegen, und rufen Sie ` setValue()` auf, während der Vorgang abläuft. Die Anzahl der Schritte kann beliebig gewählt werden. Dies kann die Anzahl der kopierten Dateien, die Anzahl der empfangenen Bytes, die Anzahl der Iterationen durch die Hauptschleife Ihres Algorithmus oder eine andere geeignete Einheit sein. Der Fortschritt beginnt bei dem durch ` setMinimum()` festgelegten Wert, und der Fortschrittsdialog zeigt an, dass der Vorgang abgeschlossen ist, wenn Sie ` setValue()` mit dem durch ` setMaximum()` festgelegten Wert als Argument aufrufen.

Der Dialog wird am Ende des Vorgangs automatisch zurückgesetzt und ausgeblendet. Verwenden Sie ` setAutoReset()` und ` setAutoClose()`, um dieses Verhalten zu ändern. Beachten Sie, dass sich der Dialog nicht schließt, wenn Sie (mit ` setMaximum()` oder ` setRange()`) einen neuen Maximalwert festlegen, der Ihrem aktuellen ` value()` entspricht.

Es gibt zwei Möglichkeiten, QProgressDialog zu verwenden: modal und modelos.

Im Vergleich zu einem modelosen QProgressDialog ist ein modaler QProgressDialog für den Programmierer einfacher zu verwenden. Führen Sie den Vorgang in einer Schleife aus, rufen Sie in regelmäßigen Abständen „ setValue()“ auf und prüfen Sie mit „ wasCanceled()“, ob der Vorgang abgebrochen wurde. Beispiel:

QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);

for (int i = 0; i < numFiles; i++) {
    progress.setValue(i);

    if (progress.wasCanceled())
        break;
    //... copy one file
}
progress.setValue(numFiles);

Ein modelloser Fortschrittsdialog eignet sich für Vorgänge, die im Hintergrund ablaufen, während der Benutzer weiterhin mit der Anwendung interagieren kann. Solche Vorgänge basieren in der Regel auf einer Timer-Klasse, wie z. B. ` QChronoTimer ` (oder der eher low-level ` QObject::timerEvent()`) oder ` QSocketNotifier`; oder sie werden in einem separaten Thread ausgeführt. Ein „ QProgressBar “ in der Statusleiste Ihres Hauptfensters ist oft eine Alternative zu einem modelosen Fortschrittsdialog.

Sie benötigen eine laufende Ereignisschleife, müssen das Signal „ canceled()“ mit einem Slot verbinden, der den Vorgang beendet, und in regelmäßigen Abständen „ setValue()“ aufrufen. Zum Beispiel:

// Operation constructor
Operation::Operation(QObject *parent)
    : QObject(parent), steps(0)
{
    pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);
    connect(pd, &QProgressDialog::canceled, this, &Operation::cancel);
    t = new QTimer(this);
    connect(t, &QTimer::timeout, this, &Operation::perform);
    t->start(0);
}

void Operation::perform()
{
    pd->setValue(steps);
    //... perform one percent of the operation
    steps++;
    if (steps > pd->maximum())
        t->stop();
}

void Operation::cancel()
{
    t->stop();
    //... cleanup
}

In beiden Modi kann der Fortschrittsdialog angepasst werden, indem die untergeordneten Widgets mithilfe von ` setLabel()`, ` setBar()` und ` setCancelButton()` durch benutzerdefinierte Widgets ersetzt werden. Die Funktionen ` setLabelText()` und ` setCancelButtonText()` legen die angezeigten Texte fest.

Ein Fortschrittsdialog im Fusion-Widget-Stil.

Siehe auch QDialog und QProgressBar.

Dokumentation zu den Eigenschaften

autoClose : bool

Diese Eigenschaft gibt an, ob das Dialogfeld durch reset() ausgeblendet wird

Der Standardwert ist „true“.

Zugriffsfunktionen:

bool autoClose() const
void setAutoClose(bool close)

Siehe auch ` setAutoReset()`.

autoReset : bool

Diese Eigenschaft gibt an, ob der Fortschrittsdialog „ reset()“ aufruft, sobald „ value()“ den Wert „ maximum()“ annimmt.

Der Standardwert ist „true“.

Zugriffsfunktionen:

bool autoReset() const
void setAutoReset(bool reset)

Siehe auch ` setAutoClose()`.

labelText : QString

Diese Eigenschaft enthält den Text der Beschriftung

Der Standardtext ist eine leere Zeichenfolge.

Zugriffsfunktionen:

QString labelText() const
void setLabelText(const QString &text)

maximum : int

Diese Eigenschaft enthält den höchsten Wert, der durch den Fortschrittsbalken dargestellt wird

Der Standardwert ist 100.

Zugriffsfunktionen:

int maximum() const
void setMaximum(int maximum)

Siehe auch „ minimum “ und „ setRange()“.

minimum : int

Diese Eigenschaft enthält den niedrigsten Wert, der durch den Fortschrittsbalken dargestellt wird

Der Standardwert ist 0.

Zugriffsfunktionen:

int minimum() const
void setMinimum(int minimum)

Siehe auch „ maximum “ und „ setRange()“.

minimumDuration : int

Diese Eigenschaft gibt die Zeit an, die vergehen muss, bevor der Dialog erscheint

Wenn die erwartete Dauer der Aufgabe kürzer ist als die „minimumDuration“, wird der Dialog gar nicht angezeigt. Dadurch wird verhindert, dass der Dialog bei Aufgaben erscheint, die schnell abgeschlossen sind. Bei Aufgaben, bei denen erwartet wird, dass sie die „minimumDuration“ überschreiten, erscheint der Dialog nach Ablauf der „minimumDuration“ oder sobald ein Fortschritt feststeht.

Bei einem Wert von 0 wird das Dialogfeld immer angezeigt, sobald ein Fortschritt feststeht. Der Standardwert beträgt 4000 Millisekunden.

Zugriffsfunktionen:

int minimumDuration() const
void setMinimumDuration(int ms)

value : int

Diese Eigenschaft enthält den aktuellen Fortschritt.

Damit der Fortschrittsdialog wie erwartet funktioniert, sollten Sie diese Eigenschaft zunächst auf ` QProgressDialog::minimum()` setzen und abschließend auf ` QProgressDialog::maximum()`; dazwischen können Sie `setValue()` beliebig oft aufrufen.

Warnung: Wenn der Fortschrittsdialog modal ist (siehe QProgressDialog::QProgressDialog()), ruft setValue() die Funktion QCoreApplication::processEvents() auf. Achten Sie daher darauf, dass dies keine unerwünschte Reentranz in Ihrem Code verursacht. Verwenden Sie beispielsweise keine QProgressDialog innerhalb einer paintEvent()!

Zugriffsfunktionen:

int value() const
void setValue(int progress)

Siehe auch minimum und maximum.

[read-only] wasCanceled : bool

Diese Eigenschaft gibt an, ob der Dialog abgebrochen wurde

Zugriffsfunktionen:

bool wasCanceled() const

Dokumentation zu den Member-Funktionen

[explicit] QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Erstellt einen Fortschrittsdialog.

Standardeinstellungen:

  • Der Text der Beschriftung ist leer.
  • Der Text der Schaltfläche „Abbrechen“ lautet (übersetzt) „Abbrechen“.
  • Der Mindestwert ist 0;
  • „maximum“ ist 100

Das Argument „ parent “ ist das übergeordnete Widget des Dialogs. Die Widget-Flags „ f “ werden an den Konstruktor „ QDialog::QDialog()“ übergeben.

Siehe auch setLabelText(), setCancelButtonText(), setCancelButton(), setMinimum() und setMaximum().

QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Erstellt einen Fortschrittsdialog.

„ labelText “ ist der Text, der den Benutzer darüber informiert, was gerade ausgeführt wird.

„ cancelButtonText “ ist der Text, der auf der Schaltfläche „Abbrechen“ angezeigt wird. Wird „QString()“ übergeben, wird keine Schaltfläche „Abbrechen“ angezeigt.

„ minimum “ und „ maximum “ geben die Anzahl der Schritte des Vorgangs an, für den dieser Fortschrittsdialog den Fortschritt anzeigt. Wenn der Vorgang beispielsweise die Überprüfung von 50 Dateien umfasst, wäre der Mindestwert 0 und der Höchstwert 50. Rufen Sie vor der Überprüfung der ersten Datei „ setValue(0)“ auf. Rufen Sie bei der Verarbeitung jeder Datei „ setValue “ (1), „ setValue “ (2) usw. auf und rufen Sie schließlich nach der Prüfung der letzten Datei „ setValue “ (50) auf.

Das Argument „ parent “ ist das übergeordnete Widget des Dialogs. Die Flags „parent“, „ parent “ und „widget“ („ f “) werden an den Konstruktor „ QDialog::QDialog()“ übergeben.

Siehe auch „ setLabelText()“, „ setLabel()“, „ setCancelButtonText()“, „ setCancelButton()“, „ setMinimum()“ und „ setMaximum()“.

[virtual noexcept] QProgressDialog::~QProgressDialog()

Schließt den Fortschrittsdialog.

[slot] void QProgressDialog::cancel()

Setzt den Fortschrittsdialog zurück. ` wasCanceled()` gibt „true“ zurück, bis der Fortschrittsdialog zurückgesetzt wird. Der Fortschrittsdialog wird ausgeblendet.

[signal] void QProgressDialog::canceled()

Dieses Signal wird ausgelöst, wenn auf die Schaltfläche „Abbrechen“ geklickt wird. Es ist standardmäßig mit dem Slot „ cancel()“ verbunden.

Siehe auch „ wasCanceled()“.

[override virtual protected] void QProgressDialog::changeEvent(QEvent *ev)

Umsetzt: QWidget::changeEvent(QEvent *event).

[override virtual protected] void QProgressDialog::closeEvent(QCloseEvent *e)

Umsetzt: ` QDialog::closeEvent(QCloseEvent *e)`.

[protected slot] void QProgressDialog::forceShow()

Zeigt das Dialogfeld an, wenn es nach dem Start des Algorithmus und nach Ablauf von minimumDuration Millisekunden noch ausgeblendet ist.

Siehe auch ` setMinimumDuration()`.

void QProgressDialog::open(QObject *receiver, const char *member)

Öffnet das Dialogfeld und verbindet dessen Signal „ canceled()“ mit dem durch „ receiver “ und „ member “ angegebenen Slot.

Das Signal wird vom Slot getrennt, sobald das Dialogfeld geschlossen wird.

[slot] void QProgressDialog::reset()

Setzt den Fortschrittsdialog zurück. Der Fortschrittsdialog wird ausgeblendet, wenn autoClose() den Wert „true“ hat.

Siehe auch setAutoClose() und setAutoReset().

[override virtual protected] void QProgressDialog::resizeEvent(QResizeEvent *event)

Implementiert: ` QDialog::resizeEvent` (`QResizeEvent *`).

void QProgressDialog::setBar(QProgressBar *bar)

Setzt das Fortschrittsbalken-Widget auf „ bar “. Der Fortschrittsdialog passt seine Größe entsprechend an. Der Fortschrittsdialog übernimmt die Verantwortung für den Fortschritts bar, der bei Bedarf gelöscht wird. Verwenden Sie daher keinen auf dem Stack zugewiesenen Fortschrittsbalken.

void QProgressDialog::setCancelButton(QPushButton *cancelButton)

Weist dem Drucktaster die Schaltfläche „Abbrechen“ zu: cancelButton. Der Fortschrittsdialog übernimmt die Kontrolle über diese Schaltfläche, die bei Bedarf gelöscht wird. Übergeben Sie daher nicht die Adresse eines Objekts, das sich auf dem Stack befindet, d. h., verwenden Sie new(), um die Schaltfläche zu erstellen. Wird nullptr übergeben, wird keine Schaltfläche „Abbrechen“ angezeigt.

Siehe auch setCancelButtonText().

[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText)

Setzt den Text der Schaltfläche „Abbrechen“ auf „ cancelButtonText “. Wird der Text auf „QString()“ gesetzt, wird die Schaltfläche „Abbrechen“ ausgeblendet und gelöscht.

Siehe auch ` setCancelButton()`.

void QProgressDialog::setLabel(QLabel *label)

Setzt die Beschriftung auf „ label “. Der Fortschrittsdialog passt seine Größe entsprechend an. Die Beschriftung wird vom Fortschrittsdialog verwaltet und bei Bedarf gelöscht. Übergeben Sie daher keine Adresse eines Objekts auf dem Stack.

Siehe auch ` setLabelText()`.

[slot] void QProgressDialog::setRange(int minimum, int maximum)

Legt den Mindest- und Höchstwert des Fortschrittsdialogs auf minimum bzw. maximum fest.

Ist maximum kleiner als minimum, ist minimum der einzig zulässige Wert.

Liegt der aktuelle Wert außerhalb des neuen Bereichs, wird der Fortschrittsdialog mit ` reset()` zurückgesetzt.

Siehe auch ` minimum ` und ` maximum`.

[override virtual protected] void QProgressDialog::showEvent(QShowEvent *e)

Implementiert: ` QDialog::showEvent` (`QShowEvent *event`).

[override virtual] QSize QProgressDialog::sizeHint() const

Implementiert neu: ` QDialog::sizeHint()` const.

Gibt eine Größe zurück, die zum Inhalt des Fortschrittsdialogs passt. Der Fortschrittsdialog passt seine Größe bei Bedarf selbst an, sodass Sie diese Funktion nicht selbst aufrufen müssen.

© 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.