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 |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QProgressDialog ist Teil der Standard-Dialoge.
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.
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.