Sur cette page

QFutureWatcher Class

template <typename T> class QFutureWatcher

La classe QFutureWatcher permet de surveiller une instance de ` QFuture ` à l'aide de signaux et de slots. En savoir plus...

En-tête : #include <QFutureWatcher>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QObject

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

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

Slots publics

void cancel()
void resume()
(since 6.0) void setSuspended(bool suspend)
(since 6.0) void suspend()
(since 6.0) void toggleSuspended()

Signaux

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

Description détaillée

QFutureWatcher est une classe de modèle dont le paramètre de modèle T spécifie le type de résultat de l’ QFuture surveillé. QFutureWatcher fournit des informations et des notifications concernant un QFuture. Utilisez la fonction setFuture() pour commencer à surveiller un QFuture particulier. La fonction future() renvoie le future défini avec setFuture().

Pour plus de commodité, plusieurs fonctions de QFuture sont également disponibles dans QFutureWatcher : progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isSuspending(), isSuspended(), waitForFinished(), result() et resultAt(). Les fonctions cancel(), setSuspended(), suspend(), resume() et toggleSuspended() sont des slots de QFutureWatcher.

Les changements d’état sont signalés via les signaux started(), finished(), canceled(), suspending(), suspended(), resumed(), resultReadyAt() et resultsReadyAt(). Les informations de progression sont fournies par les signaux progressRangeChanged(), void progressValueChanged() et progressTextChanged().

Le contrôle de la limitation est assuré par la fonction setPendingResultsLimit(). Lorsque le nombre de signaux en attente resultReadyAt() ou resultsReadyAt() dépasse la limite, le calcul représenté par le « future » est automatiquement limité. Le calcul reprend dès que le nombre de signaux en attente repasse en dessous de la limite.

Exemple : lancer un calcul et recevoir un rappel de slot une fois celui-ci terminé :

// 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);

Notez que tous les calculs asynchrones en cours d’exécution ne peuvent pas être annulés ou suspendus. Par exemple, le « future » renvoyé par QtConcurrent::run() ne peut pas être annulé ; en revanche, celui renvoyé par QtConcurrent::mappedReduced() le peut.

QFuture<void> est spécialisé pour ne contenir aucune des fonctions de récupération de résultats. Tout <T> peut également être surveillé par un QFutureWatcher<void>. Cela s’avère utile lorsque seules des informations d’état ou de progression sont nécessaires, et non les données de résultat proprement dites.

Voir également QFuture et Qt Concurrent.

Documentation des fonctions membres

[explicit] QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)

Crée un nouvel objet `QFutureWatcher` avec l'parent` fournie. Tant qu'aucun `future` n'a été défini à l'aide de ` setFuture()` (), les fonctions ` isStarted()`, ` isCanceled()` et ` isFinished()` renvoient ` true`.

[virtual] QFutureWatcher::~QFutureWatcher()

Supprime l'QFutureWatcher.

[slot] void QFutureWatcher::cancel()

Annule le calcul asynchrone représenté par la fonction ` future()`. Notez que l'annulation est asynchrone. Utilisez ` waitForFinished()` après avoir appelé `cancel()` si vous avez besoin d'une annulation synchrone.

Les résultats actuellement disponibles restent accessibles sur une instance ` QFuture` annulée, mais aucun nouveau résultat ne sera disponible après l’appel de cette fonction. De plus, cette instance ` QFutureWatcher ` n’émettra plus les signaux de progression et de résultat une fois annulée. Cela inclut les signaux ` progressValueChanged()`, ` progressRangeChanged()`, ` progressTextChanged()`, ` resultReadyAt()` et ` resultsReadyAt()`.

Notez que tous les calculs asynchrones en cours d’exécution ne peuvent pas être annulés. Par exemple, l’objet ` QFuture ` renvoyé par `QtConcurrent::run()` ne peut pas être annulé ; en revanche, l’objet ` QFuture ` renvoyé par `QtConcurrent::mappedReduced()` peut l’être.

[signal] void QFutureWatcher::canceled()

Ce signal est émis si le contrat à terme surveillé est annulé.

[signal] void QFutureWatcher::finished()

Ce signal est émis lorsque le contrat à terme suivi arrive à échéance.

QFuture<T> QFutureWatcher::future() const

Renvoie le « future » surveillé.

Voir aussi setFuture().

bool QFutureWatcher::isCanceled() const

Renvoie ` true ` si le calcul asynchrone a été annulé à l’aide de la fonction ` cancel()`, ou si aucun `future` n’a été défini ; sinon, renvoie ` false`.

Notez que le calcul peut toujours être en cours d'exécution même si cette fonction renvoie « true ». Voir cancel() pour plus de détails.

bool QFutureWatcher::isFinished() const

Renvoie ` true ` si le calcul asynchrone représenté par ` future()` est terminé, ou si aucun `future` n'a été défini ; sinon, renvoie ` false`.

bool QFutureWatcher::isRunning() const

Renvoie ` true ` si le calcul asynchrone représenté par ` future()` est en cours d'exécution ; sinon, renvoie ` false`.

bool QFutureWatcher::isStarted() const

Renvoie ` true ` si le calcul asynchrone représenté par ` future()` a été lancé, ou si aucun `future` n'a été défini ; sinon, renvoie ` false`.

[since 6.0] bool QFutureWatcher::isSuspended() const

Renvoie « true » si une suspension du calcul asynchrone a été demandée et qu’elle est en vigueur, ce qui signifie qu’aucun résultat ni aucune mise à jour sur l’avancement ne sont attendus.

Cette fonction a été introduite dans Qt 6.0.

Voir également suspended(), setSuspended() et isSuspending().

[since 6.0] bool QFutureWatcher::isSuspending() const

Renvoie true si le calcul asynchrone a été suspendu à l'aide de la fonction suspend(), mais que le traitement n'est pas encore suspendu et que le calcul est toujours en cours. Renvoie false dans le cas contraire.

Pour vérifier si la suspension est effectivement active, utilisez plutôt isSuspended().

Cette fonction a été introduite dans Qt 6.0.

Voir également setSuspended(), toggleSuspended() et isSuspended().

int QFutureWatcher::progressMaximum() const

Renvoie la valeur maximale de ` progressValue()`.

Voir également progressValue() et progressMinimum().

int QFutureWatcher::progressMinimum() const

Renvoie la valeur minimale de ` progressValue()`.

Voir également progressValue() et progressMaximum().

[signal] void QFutureWatcher::progressRangeChanged(int minimum, int maximum)

La plage de progression pour l'avenir surveillé a été modifiée et correspond désormais à minimum et maximum.

QString QFutureWatcher::progressText() const

Renvoie la représentation textuelle (facultative) de la progression telle qu'elle est signalée par le calcul asynchrone.

Notez que tous les calculs ne fournissent pas une représentation textuelle de la progression ; par conséquent, cette fonction peut renvoyer une chaîne vide.

[signal] void QFutureWatcher::progressTextChanged(const QString &progressText)

Ce signal est émis lorsque le contrat à terme surveillé communique des informations textuelles sur l'avancement, progressText.

int QFutureWatcher::progressValue() const

Renvoie la valeur de progression actuelle, comprise entre progressMinimum() et progressMaximum().

Voir également progressMinimum() et progressMaximum().

[signal] void QFutureWatcher::progressValueChanged(int progressValue)

Ce signal est émis lorsque le « future » surveillé signale une avancée ; progressValue indique la progression actuelle. Afin d’éviter de surcharger la boucle d’événements de l’interface graphique, QFutureWatcher limite la fréquence d’émission du signal de progression. Cela signifie que les écouteurs connectés à ce slot risquent de ne pas recevoir tous les rapports de progression générés par le « future ». La dernière mise à jour de progression (lorsque progressValue est égal à la valeur maximale) sera toujours transmise.

template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const

Renvoie le premier résultat de la fonction ` future()`. Si le résultat n'est pas immédiatement disponible, cette fonction se bloque et attend que le résultat soit disponible. Il s'agit d'une méthode pratique permettant d'appeler la fonction ` resultAt(0)`.

Voir également resultAt().

template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const

Renvoie le résultat de la requête index via la fonction future(). Si le résultat n'est pas immédiatement disponible, cette fonction se met en attente jusqu'à ce qu'il le soit.

Voir également result().

[signal] void QFutureWatcher::resultReadyAt(int index)

Ce signal est émis lorsque le « future » surveillé renvoie un résultat prêt à l'adresse index. Si le « future » renvoie plusieurs résultats, l'index indiquera de quel résultat il s'agit. Les résultats peuvent être renvoyés dans un ordre aléatoire. Pour obtenir le résultat, appelez resultAt(index) ;

[signal] void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)

Ce signal est émis lorsque le contrat à terme surveillé communique ses résultats. Les résultats sont répertoriés sur beginIndex à endIndex.

[slot] void QFutureWatcher::resume()

Reprend le calcul asynchrone représenté par la méthode ` future()`. Il s'agit d'une méthode de commodité qui se contente d'appeler ` setSuspended(false)`.

Voir également suspend().

[signal] void QFutureWatcher::resumed()

Ce signal est émis lorsque le contrat à terme surveillé reprend son cours.

void QFutureWatcher::setFuture(const QFuture<T> &future)

Commence à surveiller l'future spécifiée.

Si future a déjà démarré, l’observateur émettra dans un premier temps des signaux qui informent ses abonnés de l’état actuel du futur. Les signaux suivants seront, le cas échéant, émis dans l’ordre indiqué : started(), progressRangeChanged(), progressValueChanged(), progressTextChanged(), resultsReadyAt(), resultReadyAt(), suspending(), suspended(), canceled() et finished(). Parmi celles-ci, resultsReadyAt() et resultReadyAt() peuvent être émises plusieurs fois afin de couvrir tous les résultats disponibles. progressValueChanged() et progressTextChanged() ne seront émises qu'une seule fois pour la dernière valeur de progression et le dernier texte disponibles.

Pour éviter toute condition de concurrence, il est important d’appeler cette fonction après avoir établi les connexions.

Voir également future().

void QFutureWatcher::setPendingResultsLimit(int limit)

La méthode `setPendingResultsLimit()` permet de contrôler la limitation du débit. Lorsque le nombre de signaux en attente provenant des méthodes ` resultReadyAt()` ou ` resultsReadyAt()` dépasse la valeur définie par ` limit`, le calcul représenté par le `future` sera automatiquement limité. Le calcul reprendra dès que le nombre de signaux en attente passera en dessous de la valeur définie par ` limit`.

[slot, since 6.0] void QFutureWatcher::setSuspended(bool suspend)

Si suspend est vrai, cette fonction suspend le calcul asynchrone représenté par future(). Si le calcul est déjà suspendu, cette fonction ne fait rien. QFutureWatcher ne cessera pas immédiatement d’émettre les signaux de progression et de résultat prêt lorsque le « future » est suspendu. Au moment de la suspension, il se peut que certains calculs soient encore en cours et ne puissent pas être interrompus. Les signaux relatifs à ces calculs continueront d’être émis.

Si suspend est à « false », cette fonction reprend le calcul asynchrone. Si le calcul n’était pas suspendu auparavant, cette fonction ne fait rien.

Notez que tous les calculs ne peuvent pas être suspendus. Par exemple, l’ QFuture renvoyée par QtConcurrent::run() ne peut pas être suspendue ; en revanche, l’ QFuture renvoyée par QtConcurrent::mappedReduced() peut l’être.

Cette fonction a été introduite dans Qt 6.0.

Voir également suspended(), suspend(), resume() et toggleSuspended().

[signal] void QFutureWatcher::started()

Ce signal est émis lorsque cette instance QFutureWatcher commence à surveiller l'ensemble « future » à l'aide de la méthode setFuture().

[slot, since 6.0] void QFutureWatcher::suspend()

Suspend le calcul asynchrone représenté par ce « future ». Il s'agit d'une méthode pratique qui se contente d'appeler ` setSuspended(true)`.

Cette fonction a été introduite dans Qt 6.0.

Voir également ` resume()`.

[signal, since 6.0] void QFutureWatcher::suspended()

Ce signal est émis lorsque la fonction ` suspend()` a pris effet, ce qui signifie qu'il n'y a plus de calculs en cours. Après la réception de ce signal, aucun autre signal indiquant que le résultat est prêt ou faisant état de la progression n'est attendu.

Cette fonction a été introduite dans Qt 6.0.

Voir également setSuspended() et suspend().

[signal, since 6.0] void QFutureWatcher::suspending()

Ce signal est émis lorsque l'état du « future » surveillé passe à « suspendu ».

Remarque : ce signal indique uniquement qu’une suspension a été demandée. Il ne signifie pas que toutes les opérations en arrière-plan ont été arrêtées. Les signaux relatifs aux calculs en cours au moment de la suspension seront toujours émis. Pour être informé du moment où la suspension a effectivement pris effet, utilisez le signal « suspended() ».

Cette fonction a été introduite dans Qt 6.0.

Voir également setSuspended(), suspend() et suspended().

[slot, since 6.0] void QFutureWatcher::toggleSuspended()

Active ou désactive l'état de suspension du calcul asynchrone. En d'autres termes, si le calcul est en cours de suspension ou déjà suspendu, l'appel de cette fonction le reprend ; si le calcul est en cours d'exécution, il est suspendu. Il s'agit d'une méthode pratique permettant d'appeler setSuspended(!(isSuspending() || isSuspended())).

Cette fonction a été introduite dans Qt 6.0.

Voir également setSuspended(), suspend() et resume().

void QFutureWatcher::waitForFinished()

Attend que le calcul asynchrone soit terminé (y compris les calculs effectués via ` cancel()`), c'est-à-dire jusqu'à ce que ` isFinished()` renvoie ` true`.

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