QFutureWatcher Class
template <typename T> class QFutureWatcherDie Klasse „QFutureWatcher“ ermöglicht die Überwachung eines „ QFuture “ mithilfe von Signalen und Slots. Mehr...
| Header: | #include <QFutureWatcher> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QFutureWatcher ist Teil der Threading-Klassen.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Funktionen
| QFutureWatcher(QObject *parent = nullptr) | |
| virtual | ~QFutureWatcher() |
| QFuture<T> | future() const |
| bool | isCanceled() const |
| bool | isFinished() const |
| bool | isRunning() const |
| bool | isStarted() const |
(since 6.0) bool | isSuspended() const |
(since 6.0) bool | isSuspending() const |
| int | progressMaximum() const |
| int | progressMinimum() const |
| QString | progressText() const |
| int | progressValue() const |
| T | result() const |
| T | resultAt(int index) const |
| void | setFuture(const QFuture<T> &future) |
| void | setPendingResultsLimit(int limit) |
| void | waitForFinished() |
Öffentliche Slots
| void | cancel() |
| void | resume() |
(since 6.0) void | setSuspended(bool suspend) |
(since 6.0) void | suspend() |
(since 6.0) void | toggleSuspended() |
Signale
| void | canceled() |
| void | finished() |
| void | progressRangeChanged(int minimum, int maximum) |
| void | progressTextChanged(const QString &progressText) |
| void | progressValueChanged(int progressValue) |
| void | resultReadyAt(int index) |
| void | resultsReadyAt(int beginIndex, int endIndex) |
| void | resumed() |
| void | started() |
(since 6.0) void | suspended() |
(since 6.0) void | suspending() |
Ausführliche Beschreibung
`QFutureWatcher` ist eine Template-Klasse, bei der der Template-Parameter ` T ` den Ergebnistyp des überwachten ` QFuture ` angibt. `QFutureWatcher` liefert Informationen und Benachrichtigungen über ein ` QFuture`. Verwenden Sie die Funktion ` setFuture()` , um die Überwachung eines bestimmten ` QFuture` zu starten. Die Funktion ` future()` gibt das mit ` setFuture()` festgelegte Future zurück.
Der Einfachheit halber stehen einige Funktionen von QFuture auch in QFutureWatcher zur Verfügung: progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isSuspending(), isSuspended(), waitForFinished(), result() und resultAt(). Die Funktionen „ cancel “ (), „ setSuspended “ (), „ suspend “ (), „ resume “ () und „ toggleSuspended “ () sind Slots in QFutureWatcher.
Statusänderungen werden über die Signale „ started()“, „ finished()“, „ canceled()“, „ suspending()“, „ suspended()“, „ resumed()“, „ resultReadyAt()“ und „ resultsReadyAt()“ gemeldet. Informationen zum Fortschritt werden über die Signale „ progressRangeChanged()“, „void progressValueChanged()“ und „ progressTextChanged()“ bereitgestellt.
Die Drosselungssteuerung erfolgt über die Funktion „ setPendingResultsLimit()“. Wenn die Anzahl der ausstehenden Signale „ resultReadyAt()“ oder „ resultsReadyAt()“ den Grenzwert überschreitet, wird die durch den Future dargestellte Berechnung automatisch gedrosselt. Die Berechnung wird fortgesetzt, sobald die Anzahl der ausstehenden Signale unter den Grenzwert fällt.
Beispiel: Starten einer Berechnung und Abrufen eines Slot-Callbacks nach deren Abschluss:
// Instantiate the objects and connect to the finished signal.
MyClass myObject;
QFutureWatcher<int> watcher;
QObject::connect(&watcher, &QFutureWatcher<int>::finished, &myObject, &MyClass::handleFinished);
// Start the computation.
QFuture<int> future = QtConcurrent::run([result](){ /*...*/ return result;});
watcher.setFuture(future);Beachten Sie, dass nicht alle laufenden asynchronen Berechnungen abgebrochen oder angehalten werden können. Beispielsweise kann das von `QtConcurrent::run()` zurückgegebene Future nicht abgebrochen werden; das von `QtConcurrent::mappedReduced()` zurückgegebene Future hingegen schon.
QFuture<void> ist so spezialisiert, dass er keine der Funktionen zum Abrufen von Ergebnissen enthält. Jeder <T> kann ebenfalls von einem QFutureWatcher<void> überwacht werden. Dies ist nützlich, wenn nur Status- oder Fortschrittsinformationen benötigt werden, nicht jedoch die eigentlichen Ergebnisdaten.
Siehe auch „ QFuture “ und Qt Concurrent.
Dokumentation zu den Mitgliedsfunktionen
[explicit] QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)
Erstellt einen neuen `QFutureWatcher` mit dem angegebenen ` parent`. Solange kein `Future` mit ` setFuture()` festgelegt wurde, geben die Funktionen ` isStarted()`, ` isCanceled()` und ` isFinished()` den Wert ` true` zurück.
[virtual] QFutureWatcher::~QFutureWatcher()
Zerstört die „ QFutureWatcher “.
[slot] void QFutureWatcher::cancel()
Bricht die durch ` future()` dargestellte asynchrone Berechnung ab. Beachten Sie, dass der Abbruch asynchron erfolgt. Verwenden Sie ` waitForFinished()`, nachdem Sie `cancel()` aufgerufen haben, wenn Sie einen synchronen Abbruch benötigen.
Auf ein abgebrochenes ` QFuture` kann weiterhin auf die aktuell verfügbaren Ergebnisse zugegriffen werden, jedoch werden nach dem Aufruf dieser Funktion keine neuen Ergebnisse mehr verfügbar sein. Außerdem liefert dieses ` QFutureWatcher ` nach dem Abbruch keine „progress“- und „result-ready“-Signale mehr. Dazu gehören die Signale ` progressValueChanged()`, ` progressRangeChanged()`, ` progressTextChanged()`, ` resultReadyAt()` und ` resultsReadyAt()`.
Beachten Sie, dass nicht alle laufenden asynchronen Berechnungen abgebrochen werden können. Beispielsweise kann die von QtConcurrent::run() zurückgegebene „ QFuture “ nicht abgebrochen werden; die von QtConcurrent::mappedReduced() zurückgegebene „ QFuture “ hingegen schon.
[signal] void QFutureWatcher::canceled()
Dieses Signal wird ausgegeben, wenn der überwachte Future storniert wird.
[signal] void QFutureWatcher::finished()
Dieses Signal wird ausgegeben, wenn der beobachtete Future abgelaufen ist.
QFuture<T> QFutureWatcher::future() const
Gibt das überwachte Future zurück.
Siehe auch ` setFuture()`.
bool QFutureWatcher::isCanceled() const
Gibt „ true “ zurück, wenn die asynchrone Berechnung mit der Funktion „ cancel()“ abgebrochen wurde oder wenn kein Future festgelegt wurde; andernfalls wird „ false “ zurückgegeben.
Beachten Sie, dass die Berechnung möglicherweise noch läuft, auch wenn diese Funktion „ true “ zurückgibt. Weitere Informationen finden Sie unter „ cancel()“.
bool QFutureWatcher::isFinished() const
Gibt „ true “ zurück, wenn die durch „ future()“ dargestellte asynchrone Berechnung abgeschlossen ist oder wenn kein Future festgelegt wurde; andernfalls wird „ false “ zurückgegeben.
bool QFutureWatcher::isRunning() const
Gibt „ true “ zurück, wenn die durch „ future()“ dargestellte asynchrone Berechnung gerade ausgeführt wird; andernfalls wird „ false “ zurückgegeben.
bool QFutureWatcher::isStarted() const
Gibt „ true “ zurück, wenn die durch „ future()“ dargestellte asynchrone Berechnung gestartet wurde oder wenn kein Future gesetzt wurde; andernfalls wird „ false “ zurückgegeben.
[since 6.0] bool QFutureWatcher::isSuspended() const
Gibt „ true “ zurück, wenn eine Unterbrechung der asynchronen Berechnung angefordert wurde und diese aktiv ist, was bedeutet, dass keine weiteren Ergebnisse oder Fortschrittsänderungen mehr zu erwarten sind.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch „ suspended()“, „ setSuspended()“ und „ isSuspending()“.
[since 6.0] bool QFutureWatcher::isSuspending() const
Gibt „ true “ zurück, wenn die asynchrone Berechnung mit der Funktion „ suspend()“ angehalten wurde, die Arbeit jedoch noch nicht angehalten ist und die Berechnung weiterhin läuft. Andernfalls wird „ false “ zurückgegeben.
Um zu prüfen, ob die Unterbrechung tatsächlich wirksam ist, verwenden Sie stattdessen ` isSuspended()`.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), toggleSuspended() und isSuspended().
int QFutureWatcher::progressMaximum() const
Gibt den Maximalwert von ` progressValue()` zurück.
Siehe auch progressValue() und progressMinimum().
int QFutureWatcher::progressMinimum() const
Gibt den Minimalwert von ` progressValue()` zurück.
Siehe auch „ progressValue()“ und „ progressMaximum()“.
[signal] void QFutureWatcher::progressRangeChanged(int minimum, int maximum)
Der Fortschrittsbereich für die beobachtete Zukunft hat sich zu minimum und maximum geändert.
QString QFutureWatcher::progressText() const
Gibt die (optionale) textuelle Darstellung des Fortschritts zurück, wie er von der asynchronen Berechnung gemeldet wird.
Beachten Sie, dass nicht alle Berechnungen eine textuelle Darstellung des Fortschritts bereitstellen und diese Funktion daher möglicherweise eine leere Zeichenkette zurückgibt.
[signal] void QFutureWatcher::progressTextChanged(const QString &progressText)
Dieses Signal wird ausgelöst, wenn der überwachte Future textuelle Fortschrittsinformationen meldet: progressText.
int QFutureWatcher::progressValue() const
Gibt den aktuellen Fortschrittswert zurück, der zwischen progressMinimum() und progressMaximum() liegt.
Siehe auch progressMinimum() und progressMaximum().
[signal] void QFutureWatcher::progressValueChanged(int progressValue)
Dieses Signal wird ausgelöst, wenn das überwachte Future einen Fortschritt meldet; progressValue gibt den aktuellen Fortschritt an. Um eine Überlastung der GUI-Ereignisschleife zu vermeiden, begrenzt QFutureWatcher die Auslösungsrate des Fortschrittssignals. Das bedeutet, dass Listener, die mit diesem Slot verbunden sind, möglicherweise nicht alle Fortschrittsmeldungen des Futures erhalten. Die letzte Fortschrittsaktualisierung (bei der progressValue dem Maximalwert entspricht) wird immer übermittelt.
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const
Gibt das erste Ergebnis aus „ future()“ zurück. Wenn das Ergebnis nicht sofort verfügbar ist, wird diese Funktion blockiert und wartet, bis das Ergebnis vorliegt. Dies ist eine Komfortmethode zum Aufruf von „ resultAt(0)“.
Siehe auch „ resultAt()“.
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const
Gibt das Ergebnis unter index in der Funktion future() zurück. Wenn das Ergebnis nicht sofort verfügbar ist, wird diese Funktion blockiert und wartet, bis das Ergebnis verfügbar ist.
Siehe auch ` result()`.
[signal] void QFutureWatcher::resultReadyAt(int index)
Dieses Signal wird ausgelöst, wenn der überwachte Future ein fertiges Ergebnis unter index meldet. Wenn der Future mehrere Ergebnisse meldet, gibt der Index an, um welches es sich handelt. Ergebnisse können in ungeordneter Reihenfolge gemeldet werden. Um das Ergebnis abzurufen, rufen Sie resultAt(index) auf;
[signal] void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)
Dieses Signal wird ausgelöst, wenn der überwachte Future Ergebnisse bereitstellt. Die Ergebnisse sind unter beginIndex bis endIndex indexiert.
[slot] void QFutureWatcher::resume()
Setzt die durch ` future()` dargestellte asynchrone Berechnung fort. Dies ist eine Komfortmethode, die lediglich ` setSuspended(false)` aufruft.
Siehe auch suspend().
[signal] void QFutureWatcher::resumed()
Dieses Signal wird ausgegeben, wenn der überwachte Future fortgesetzt wird.
void QFutureWatcher::setFuture(const QFuture<T> &future)
Beginnt mit der Überwachung der angegebenen future.
Wenn future bereits gestartet ist, sendet der Watcher zunächst Signale aus, die seine Abhörer über den aktuellen Zustand des Futures auf den neuesten Stand bringen. Die folgenden Signale werden, sofern zutreffend, in der angegebenen Reihenfolge ausgesendet: started(), progressRangeChanged(), progressValueChanged(), progressTextChanged(), resultsReadyAt(), resultReadyAt(), suspending(), suspended(), canceled() und finished(). Davon werden „ resultsReadyAt “ () und „ resultReadyAt “ () möglicherweise mehrmals ausgegeben, um alle verfügbaren Ergebnisse abzudecken. „ progressValueChanged “ () und „ progressTextChanged “ () werden jeweils nur einmal für den aktuellsten verfügbaren Fortschrittswert und -text ausgegeben.
Um eine Race Condition zu vermeiden, ist es wichtig, diese Funktion erst nach dem Herstellen der Verbindungen aufzurufen.
Siehe auch ` future()`.
void QFutureWatcher::setPendingResultsLimit(int limit)
Die Methode `setPendingResultsLimit()` ermöglicht die Drosselung. Wenn die Anzahl der ausstehenden Signale von ` resultReadyAt()` oder ` resultsReadyAt()` den Wert ` limit` überschreitet, wird die durch den Future dargestellte Berechnung automatisch gedrosselt. Die Berechnung wird fortgesetzt, sobald die Anzahl der ausstehenden Signale unter den Wert ` limit` fällt.
[slot, since 6.0] void QFutureWatcher::setSuspended(bool suspend)
Wenn „ suspend “ wahr ist, unterbricht diese Funktion die durch „ future()“ dargestellte asynchrone Berechnung. Ist die Berechnung bereits unterbrochen, führt diese Funktion keine Aktion aus. „ QFutureWatcher “ stellt die Ausgabe von Fortschritts- und Ergebnis-Signalen nicht sofort ein, wenn der „Future“ unterbrochen wird. Zum Zeitpunkt der Unterbrechung können noch Berechnungen im Gange sein, die nicht gestoppt werden können. Signale für solche Berechnungen werden weiterhin ausgegeben.
Ist ` suspend ` falsch, setzt diese Funktion die asynchrone Berechnung fort. Wurde die Berechnung zuvor nicht angehalten, führt diese Funktion keine Aktion aus.
Beachten Sie, dass nicht alle Berechnungen angehalten werden können. Beispielsweise kann der von `QtConcurrent::run()` zurückgegebene ` QFuture ` nicht angehalten werden; der von `QtConcurrent::mappedReduced()` zurückgegebene ` QFuture ` hingegen schon.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch ` suspended()`, ` suspend()`, ` resume()` und ` toggleSuspended()`.
[signal] void QFutureWatcher::started()
Dieses Signal wird ausgelöst, wenn dieses QFutureWatcher beginnt, den zukünftigen Datensatz mit setFuture() zu überwachen.
[slot, since 6.0] void QFutureWatcher::suspend()
Setzt die durch diese Future dargestellte asynchrone Berechnung aus. Dies ist eine Komfortmethode, die lediglich ` setSuspended(true)` aufruft.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch ` resume()`.
[signal, since 6.0] void QFutureWatcher::suspended()
Dieses Signal wird ausgesendet, wenn „ suspend()“ wirksam wurde, was bedeutet, dass keine Berechnungen mehr laufen. Nach dem Empfang dieses Signals werden keine weiteren Signale zum Vorliegen von Ergebnissen oder zum Fortschritt mehr erwartet.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch „ setSuspended()“ und „ suspend()“.
[signal, since 6.0] void QFutureWatcher::suspending()
Dieses Signal wird ausgelöst, wenn der Status des überwachten Futures auf „ausgesetzt“ gesetzt wird.
Hinweis: Dieses Signal informiert lediglich darüber, dass eine Aussetzung angefordert wurde. Es bedeutet nicht, dass alle Hintergrundvorgänge gestoppt wurden. Signale für Berechnungen, die zum Zeitpunkt der Aussetzung noch liefen, werden weiterhin ausgegeben. Um informiert zu werden, wann die Aussetzung tatsächlich in Kraft getreten ist, verwenden Sie das Signal „ suspended()“.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch „ setSuspended()“, „ suspend()“ und „ suspended()“.
[slot, since 6.0] void QFutureWatcher::toggleSuspended()
Schaltet den angehaltenen Zustand der asynchronen Berechnung um. Mit anderen Worten: Wenn die Berechnung gerade angehalten wird oder angehalten ist, wird sie durch den Aufruf dieser Funktion fortgesetzt; wenn die Berechnung läuft, wird sie angehalten. Dies ist eine Komfortmethode zum Aufruf von ` setSuspended(!(isSuspending() || isSuspended())).
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), suspend() und resume().
void QFutureWatcher::waitForFinished()
Wartet, bis die asynchrone Berechnung abgeschlossen ist (einschließlich der mit ` cancel()` aufgerufenen Berechnungen), d. h. bis ` isFinished()` den Wert ` true` zurückgibt.
© 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.