QProgressDialog Class

Die Klasse QProgressDialog gibt Rückmeldung über den Fortschritt einer langsamen Operation. Mehr...

Kopfzeile: #include <QProgressDialog>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbt: 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

Reimplementierte ö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()

Reimplementierte 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 Steckplätze

void forceShow()

Detaillierte Beschreibung

Ein Fortschrittsdialog wird verwendet, um dem Benutzer anzuzeigen, wie lange ein Vorgang dauern wird, und um zu demonstrieren, dass die Anwendung nicht eingefroren ist. Er kann dem Benutzer auch die Möglichkeit geben, den Vorgang abzubrechen.

Ein häufiges Problem mit Fortschrittsdialogen ist, dass es schwierig ist, zu wissen, wann sie verwendet werden sollen; Operationen dauern auf unterschiedlicher Hardware unterschiedlich lange. QProgressDialog bietet eine Lösung für dieses Problem: es schätzt die Zeit, die die Operation dauern wird (basierend auf der Zeit für Schritte) und zeigt sich nur, wenn diese Schätzung über minimumDuration() (standardmäßig 4 Sekunden) liegt.

Verwenden Sie setMinimum() und setMaximum() oder den Konstruktor, um die Anzahl der "Schritte" in der Operation festzulegen und rufen Sie setValue() auf, wenn die Operation fortschreitet. Die Anzahl der Schritte kann willkürlich gewählt werden. Sie 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 mit dem Wert, der mit setMinimum() festgelegt wurde, und der Fortschrittsdialog zeigt an, dass der Vorgang abgeschlossen ist, wenn Sie setValue() mit dem Wert aufrufen, der mit setMaximum() als Argument festgelegt wurde.

Der Dialog wird automatisch zurückgesetzt und am Ende des Vorgangs ausgeblendet. Verwenden Sie setAutoReset() und setAutoClose(), um dieses Verhalten zu ändern. Beachten Sie, dass das Dialogfeld nicht geschlossen wird, wenn Sie einen neuen Höchstwert festlegen (mit setMaximum() oder setRange()), der dem aktuellen value() entspricht.

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

Im Vergleich zu einem modalen QProgressDialog ist ein modaler QProgressDialog für den Programmierer einfacher zu verwenden. Führen Sie die Operation in einer Schleife aus, rufen Sie setValue() in Intervallen auf und prüfen Sie mit wasCanceled(), ob die Operation abgebrochen wurde. Ein 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 modellloser Fortschrittsdialog eignet sich für Operationen, die im Hintergrund ablaufen, wo der Benutzer mit der Anwendung interagieren kann. Solche Operationen basieren typischerweise auf einer Timer-Klasse, wie QChronoTimer (oder der einfacheren QObject::timerEvent()) oder QSocketNotifier; oder werden in einem separaten Thread ausgeführt. Ein QProgressBar in der Statusleiste Ihres Hauptfensters ist oft eine Alternative zu einem modelllosen Fortschrittsdialog.

Sie müssen eine Ereignisschleife laufen lassen, das Signal canceled() mit einem Slot verbinden, der die Operation anhält, und setValue() in Intervallen aufrufen. Ein 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 durch eigene Widgets ersetzt werden, indem setLabel(), setBar() und setCancelButton() verwendet werden. Die Funktionen setLabelText() und setCancelButtonText() setzen die angezeigten Texte.

A progress dialog shown in the Fusion widget style.

Siehe auch QDialog und QProgressBar.

Dokumentation der Eigenschaften

autoClose : bool

Diese Eigenschaft legt fest, ob das Dialogfeld durch reset ausgeblendet werden soll ().

Die Voreinstellung ist true.

Zugriffsfunktionen:

bool autoClose() const
void setAutoClose(bool close)

Siehe auch setAutoReset().

autoReset : bool

Diese Eigenschaft legt fest, ob der Fortschrittsdialog reset() aufruft, sobald value() gleich maximum() ist.

Die Voreinstellung ist true.

Zugriffsfunktionen:

bool autoReset() const
void setAutoReset(bool reset)

Siehe auch setAutoClose().

labelText : QString

Diese Eigenschaft enthält den Text des Etiketts

Der Standardtext ist eine leere Zeichenkette.

Zugriffsfunktionen:

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

maximum : int

Diese Eigenschaft enthält den höchsten Wert, den der Fortschrittsbalken anzeigt

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, den der Fortschrittsbalken darstellt

Der Standardwert ist 0.

Zugriffsfunktionen:

int minimum() const
void setMinimum(int minimum)

Siehe auch maximum und setRange().

minimumDuration : int

Diese Eigenschaft enthält die Zeit, die vergehen muss, bevor das Dialogfeld erscheint

Ist die voraussichtliche Dauer der Aufgabe kürzer als minimumDuration, wird das Dialogfeld nicht angezeigt. Dadurch wird verhindert, dass der Dialog bei Aufgaben erscheint, die schnell vorbei sind. Bei Aufgaben, die voraussichtlich länger als die Mindestdauer dauern werden, erscheint das Dialogfeld nach der Mindestdauer oder sobald ein Fortschritt festgestellt wird.

Bei einem Wert von 0 wird das Dialogfeld immer angezeigt, sobald ein Fortschritt festgestellt wird. Der Standardwert ist 4000 Millisekunden.

Zugriffsfunktionen:

int minimumDuration() const
void setMinimumDuration(int ms)

value : int

Diese Eigenschaft zeigt den aktuellen Fortschritt an.

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

Warnung: Wenn der Fortschrittsdialog modal ist (siehe QProgressDialog::QProgressDialog()), ruft setValue() QCoreApplication::processEvents() auf; achten Sie also darauf, dass dies nicht zu unerwünschten Wiederholungen in Ihrem Code führt. Verwenden Sie zum Beispiel kein QProgressDialog innerhalb eines paintEvent()!

Zugriff auf Funktionen:

int value() const
void setValue(int progress)

Siehe auch minimum und maximum.

[read-only] wasCanceled : const bool

Diese Eigenschaft gibt an, ob der Dialog abgebrochen wurde.

Zugriffsfunktionen:

bool wasCanceled() const

Dokumentation der Mitgliedsfunktionen

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

Konstruiert einen Fortschrittsdialog.

Standardeinstellungen:

  • Der Beschriftungstext ist leer.
  • Der Text der Abbrechen-Schaltfläche ist (übersetzt) "Abbrechen".
  • Minimum ist 0;
  • Maximum ist 100

Das Argument parent ist das übergeordnete Widget des Dialogs. Die Widget-Flags, f, werden an den QDialog::QDialog() Konstruktor ü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())

Konstruiert einen Fortschrittsdialog.

labelText ist der Text, der verwendet wird, um den Benutzer daran zu erinnern, was gerade passiert.

cancelButtonText ist der Text, der auf der Abbrechen-Schaltfläche angezeigt wird. Wenn QString() übergeben wird, wird keine Abbruchschaltfläche angezeigt.

minimum und maximum sind die Anzahl der Schritte des Vorgangs, für die dieser Fortschrittsdialog den Fortschritt anzeigt. Wenn der Vorgang beispielsweise 50 Dateien untersuchen soll, wäre der Mindestwert 0 und der Höchstwert 50. Bevor Sie die erste Datei untersuchen, rufen Sie setValue(0) auf. Während jede Datei verarbeitet wird, rufen Sie setValue(1), setValue(2) usw. auf und rufen schließlich setValue(50) auf, nachdem Sie die letzte Datei untersucht haben.

Das Argument parent ist das übergeordnete Widget des Dialogs. Das Elternteil, parent, und die Widget-Flags, f, werden an den Konstruktor QDialog::QDialog() übergeben.

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

[virtual noexcept] QProgressDialog::~QProgressDialog()

Zerstört den Fortschrittsdialog.

[slot] void QProgressDialog::cancel()

Setzt den Fortschrittsdialog zurück. wasCanceled() wird wahr, bis der Fortschrittsdialog zurückgesetzt wird. Der Fortschrittsdialog wird ausgeblendet.

[signal] void QProgressDialog::canceled()

Dieses Signal wird ausgegeben, wenn die Schaltfläche "Abbrechen" angeklickt wird. Es ist standardmäßig mit dem Slot cancel() verbunden.

Siehe auch wasCanceled().

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

Reimplements: QWidget::changeEvent(QEvent *Event).

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

Reimplements: 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 sein Signal canceled() mit dem durch receiver und member angegebenen Steckplatz.

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

[slot] void QProgressDialog::reset()

Setzt den Fortschrittsdialog zurück. Der Fortschrittsdialog wird ausgeblendet, wenn autoClose() wahr ist.

Siehe auch setAutoClose() und setAutoReset().

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

Reimplements: QDialog::resizeEvent(QResizeEvent *).

void QProgressDialog::setBar(QProgressBar *bar)

Setzt das Fortschrittsbalken-Widget auf bar. Der Fortschrittsdialog passt seine Größe an. Der Fortschrittsdialog übernimmt das Eigentum am Fortschrittsbalken bar, der bei Bedarf gelöscht wird. Verwenden Sie also keinen Fortschrittsbalken, der auf dem Stapel liegt.

void QProgressDialog::setCancelButton(QPushButton *cancelButton)

Setzt die Abbruchtaste auf die Drucktaste, cancelButton. Der Fortschrittsdialog ist Eigentümer dieser Schaltfläche, die bei Bedarf gelöscht wird. Übergeben Sie also nicht die Adresse eines Objekts, das sich auf dem Stack befindet, d.h. verwenden Sie new(), um die Schaltfläche zu erstellen. Wenn nullptr übergeben wird, wird keine Abbrechen-Schaltfläche angezeigt.

Siehe auch setCancelButtonText().

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

Setzt den Text der Abbrechen-Schaltfläche auf cancelButtonText. Wenn der Text auf QString() gesetzt ist, wird die Abbrechen-Schaltfläche ausgeblendet und gelöscht.

Siehe auch setCancelButton().

void QProgressDialog::setLabel(QLabel *label)

Setzt das Label auf label. Die Größe des Fortschrittsdialogs wird entsprechend angepasst. Das Label wird Eigentum des Fortschrittsdialogs und wird bei Bedarf gelöscht, also übergeben Sie nicht die Adresse eines Objekts auf dem Stack.

Siehe auch setLabelText().

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

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

Wenn maximum kleiner als minimum ist, wird minimum zum einzig zulässigen Wert.

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

Siehe auch minimum und maximum.

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

Reimplements: QDialog::showEvent(QShowEvent *event).

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

Reimplements: QDialog::sizeHint() const.

Gibt eine Größe zurück, die dem Inhalt des Fortschrittsdialogs entspricht. Der Fortschrittsdialog ändert seine Größe bei Bedarf selbst, so dass Sie dies nicht selbst aufrufen müssen.

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