QFutureWatcher Class
template <typename T> class QFutureWatcherLa clase QFutureWatcher permite monitorizar un QFuture utilizando señales y ranuras. Más...
| Cabecera: | #include <QFutureWatcher> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QObject |
- Lista de todos los miembros, incluidos los heredados
- Miembros obsoletos
- QFutureWatcher es parte de la clase Threading Classes.
Nota: Todas las funciones de esta clase son reentrantes.
Funciones Públicas
| 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 Públicos
| void | cancel() |
| void | resume() |
(since 6.0) void | setSuspended(bool suspend) |
(since 6.0) void | suspend() |
(since 6.0) void | toggleSuspended() |
Señales
| 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() |
Descripción Detallada
QFutureWatcher proporciona información y notificaciones sobre un QFuture. Utilice la función setFuture() para comenzar a observar un QFuture en particular. La función future() devuelve el futuro establecido con setFuture().
Por comodidad, varias de las funciones de QFuture's también están disponibles en QFutureWatcher: progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isSuspending(), isSuspended(), waitForFinished(), result(), y resultAt(). Las funciones cancel(), setSuspended(), suspend(), resume() y toggleSuspended() son ranuras en QFutureWatcher.
Los cambios de estado se comunican a través de las señales started(), finished(), canceled(), suspending(), suspended(), resumed(), resultReadyAt(), y resultsReadyAt(). Las señales progressRangeChanged(), void progressValueChanged() y progressTextChanged() proporcionan información sobre el progreso.
El control de aceleración lo proporciona la función setPendingResultsLimit(). Cuando el número de señales resultReadyAt() o resultsReadyAt() pendientes supera el límite, el cálculo representado por el futuro se ralentizará automáticamente. El cálculo se reanudará cuando el número de señales pendientes descienda por debajo del límite.
Ejemplo: Iniciar una computación y obtener una devolución de llamada de la ranura cuando haya terminado:
// 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);
Ten en cuenta que no todos los cálculos asíncronos en ejecución pueden cancelarse o suspenderse. Por ejemplo, el futuro devuelto por QtConcurrent::run() no puede cancelarse; pero el futuro devuelto por QtConcurrent::mappedReduced() sí.
QFutureWatcher<void> está especializado para no contener ninguna de las funciones de obtención de resultados. Cualquier QFuture<T> puede ser observado también por un QFutureWatcher<void>. Esto es útil si sólo se necesita información de estado o progreso; no los datos de resultado reales.
Véase también QFuture y Qt Concurrent.
Documentación de funciones miembro
[explicit] QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)
Construye un nuevo QFutureWatcher con la dirección parent. Hasta que se establece un futuro con setFuture(), las funciones isStarted(), isCanceled(), y isFinished() devuelven true.
[virtual] QFutureWatcher::~QFutureWatcher()
Destruye el QFutureWatcher.
[slot] void QFutureWatcher::cancel()
Cancela el cálculo asíncrono representado por future(). Tenga en cuenta que la cancelación es asíncrona. Utilice waitForFinished() después de llamar a cancel() cuando necesite una cancelación sincrónica.
Todavía se puede acceder a los resultados actualmente disponibles en un QFuture cancelado, pero los nuevos resultados no estarán disponibles después de llamar a esta función. Además, este QFutureWatcher no entregará señales de progreso y de resultado listo una vez cancelado. Esto incluye las señales progressValueChanged(), progressRangeChanged(), progressTextChanged(), resultReadyAt() y resultsReadyAt().
Ten en cuenta que no todos los cálculos asíncronos en ejecución pueden cancelarse. Por ejemplo, el QFuture devuelto por QtConcurrent::run() no puede cancelarse; pero el QFuture devuelto por QtConcurrent::mappedReduced() sí puede.
[signal] void QFutureWatcher::canceled()
Esta señal se emite si se cancela el futuro vigilado.
[signal] void QFutureWatcher::finished()
Esta señal se emite cuando finaliza el futuro observado.
QFuture<T> QFutureWatcher::future() const
Devuelve el futuro observado.
Véase también setFuture().
bool QFutureWatcher::isCanceled() const
Devuelve true si el cálculo asíncrono se ha cancelado con la función cancel(), o si no se ha establecido ningún futuro; en caso contrario devuelve false.
Tenga en cuenta que el cálculo puede seguir en curso aunque esta función devuelva true. Véase cancel() para más detalles.
bool QFutureWatcher::isFinished() const
Devuelve true si el cálculo asíncrono representado por future() ha finalizado, o si no se ha establecido ningún futuro; en caso contrario devuelve false.
bool QFutureWatcher::isRunning() const
Devuelve true si el cálculo asíncrono representado por future() se está ejecutando actualmente; en caso contrario, devuelve false.
bool QFutureWatcher::isStarted() const
Devuelve true si el cálculo asíncrono representado por future() se ha iniciado, o si no se ha establecido ningún futuro; en caso contrario devuelve false.
[since 6.0] bool QFutureWatcher::isSuspended() const
Devuelve true si se ha solicitado una suspensión del cómputo asíncrono, y está en efecto, lo que significa que no se esperan más resultados o cambios de progreso.
Esta función se introdujo en Qt 6.0.
Véase también suspended(), setSuspended(), y isSuspending().
[since 6.0] bool QFutureWatcher::isSuspending() const
Devuelve true si el cálculo asíncrono se ha suspendido con la función suspend(), pero el trabajo aún no se ha suspendido y el cálculo sigue en curso. En caso contrario, devuelve false.
Para comprobar si la suspensión está realmente en efecto, utilice isSuspended() en su lugar.
Esta función se introdujo en Qt 6.0.
Véase también setSuspended(), toggleSuspended() y isSuspended().
int QFutureWatcher::progressMaximum() const
Devuelve el máximo progressValue().
Véase también progressValue() y progressMinimum().
int QFutureWatcher::progressMinimum() const
Devuelve el mínimo progressValue().
Véase también progressValue() y progressMaximum().
[signal] void QFutureWatcher::progressRangeChanged(int minimum, int maximum)
El rango de progreso para el futuro vigilado ha cambiado a minimum y maximum.
QString QFutureWatcher::progressText() const
Devuelve la representación textual (opcional) del progreso informado por el cálculo asíncrono.
Tenga en cuenta que no todos los cálculos proporcionan una representación textual del progreso, por lo que esta función puede devolver una cadena vacía.
[signal] void QFutureWatcher::progressTextChanged(const QString &progressText)
Esta señal se emite cuando el futuro vigilado comunica información textual sobre el progreso, progressText.
int QFutureWatcher::progressValue() const
Devuelve el valor de progreso actual, que se encuentra entre progressMinimum() y progressMaximum().
Véase también progressMinimum() y progressMaximum().
[signal] void QFutureWatcher::progressValueChanged(int progressValue)
Esta señal se emite cuando el futuro observado informa del progreso, progressValue da el progreso actual. Para evitar sobrecargar el bucle de eventos de la GUI, QFutureWatcher limita la tasa de emisión de la señal de progreso. Esto significa que los oyentes conectados a esta ranura podrían no recibir todos los informes de progreso que hace el futuro. Siempre se entregará la última actualización de progreso (donde progressValue es igual al valor máximo).
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const
Devuelve el primer resultado en future(). Si el resultado no está disponible inmediatamente, esta función se bloqueará y esperará a que el resultado esté disponible. Este es un método conveniente para llamar a resultAt(0).
Véase también resultAt().
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const
Devuelve el resultado en index en future(). Si el resultado no está disponible inmediatamente, esta función se bloqueará y esperará a que el resultado esté disponible.
Véase también result().
[signal] void QFutureWatcher::resultReadyAt(int index)
Esta señal se emite cuando el futuro vigilado informa de un resultado listo en index. Si el futuro informa de varios resultados, el índice indicará de cuál se trata. Los resultados pueden notificarse fuera de orden. Para obtener el resultado, llame a resultAt(índice);
[signal] void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)
Esta señal se emite cuando el futuro observado informa de resultados listos. Los resultados se indexan de beginIndex a endIndex.
[slot] void QFutureWatcher::resume()
Reanuda el cálculo asíncrono representado por future(). Este es un método de conveniencia que simplemente llama a setSuspended(false).
Véase también suspend().
[signal] void QFutureWatcher::resumed()
Esta señal se emite cuando se reanuda el futuro vigilado.
void QFutureWatcher::setFuture(const QFuture<T> &future)
Inicia la observación del futuro future.
Si future ya ha comenzado, el observador emitirá inicialmente señales que pongan al día a sus oyentes sobre el estado del futuro. Si procede, se emitirán las siguientes señales en el orden indicado: started(), progressRangeChanged(), progressValueChanged(), progressTextChanged(), resultsReadyAt(), resultReadyAt(), suspending(), suspended(), canceled() y finished(). De estos, resultsReadyAt() y resultReadyAt() pueden emitirse varias veces para cubrir todos los resultados disponibles. progressValueChanged() y progressTextChanged() sólo se emitirán una vez para el último valor de progreso y texto disponibles.
Para evitar una condición de carrera, es importante llamar a esta función después de hacer las conexiones.
Véase también future().
void QFutureWatcher::setPendingResultsLimit(int limit)
La función setPendingResultsLimit() proporciona un control de aceleración. Cuando el número de señales pendientes resultReadyAt() o resultsReadyAt() supera limit, el cálculo representado por el futuro se ralentizará automáticamente. El cálculo se reanudará cuando el número de señales pendientes descienda por debajo de limit.
[slot, since 6.0] void QFutureWatcher::setSuspended(bool suspend)
Si suspend es verdadero, esta función suspende el cómputo asíncrono representado por future(). Si el cómputo ya está suspendido, esta función no hace nada. QFutureWatcher no dejará inmediatamente de entregar señales de progreso y de resultado listo cuando se suspenda el futuro. En el momento de suspender todavía puede haber cómputos que estén en progreso y no puedan detenerse. Las señales para dichos cálculos seguirán enviándose.
Si suspend es falso, esta función reanuda el cálculo asíncrono. Si el cálculo no se suspendió previamente, esta función no hace nada.
Tenga en cuenta que no todos los cálculos pueden suspenderse. Por ejemplo, el QFuture devuelto por QtConcurrent::run() no puede suspenderse; pero el QFuture devuelto por QtConcurrent::mappedReduced() sí puede.
Esta función se introdujo en Qt 6.0.
Véase también suspended(), suspend(), resume(), y toggleSuspended().
[signal] void QFutureWatcher::started()
Esta señal se emite cuando este QFutureWatcher comienza a observar el futuro establecido con setFuture().
[slot, since 6.0] void QFutureWatcher::suspend()
Suspende el cálculo asíncrono representado por este futuro. Este es un método conveniente que simplemente llama a setSuspended(true).
Esta función se introdujo en Qt 6.0.
Véase también resume().
[signal, since 6.0] void QFutureWatcher::suspended()
Esta señal se emite cuando suspend() surte efecto, lo que significa que no hay más cálculos en ejecución. Después de recibir esta señal no se esperan más señales de resultado listo o de informe de progreso.
Esta función se introdujo en Qt 6.0.
Véase también setSuspended() y suspend().
[signal, since 6.0] void QFutureWatcher::suspending()
Esta señal se emite cuando el estado del futuro vigilado se establece como suspendido.
Nota: Esta señal sólo informa de que se ha solicitado la suspensión. No indica que se hayan detenido todas las operaciones en segundo plano. Las señales para los cálculos que estaban en curso en el momento de la suspensión seguirán emitiéndose. Para ser informado cuando la suspensión realmente tuvo efecto, utilice la señal suspended().
Esta función se introdujo en Qt 6.0.
Véase también setSuspended(), suspend() y suspended().
[slot, since 6.0] void QFutureWatcher::toggleSuspended()
Cambia el estado suspendido de la computación asíncrona. En otras palabras, si el cómputo está actualmente suspendido o en suspensión, al llamar a esta función se reanuda; si el cómputo está en ejecución, se suspende. Este es un método de conveniencia para llamar a setSuspended(!(isSuspending() || isSuspended())).
Esta función se introdujo en Qt 6.0.
Véase también setSuspended(), suspend(), y resume().
void QFutureWatcher::waitForFinished()
Espera a que finalice el cálculo asíncrono (incluidos los cálculos de cancel()ed), es decir, hasta que isFinished() devuelva 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.