Los cambios introducidos en Qt Concurrent
Qt 6 son el resultado del esfuerzo consciente por hacer el framework más eficiente y fácil de usar.
Intentamos mantener la compatibilidad binaria y de código fuente de todas las API públicas en cada versión. Pero algunos cambios eran inevitables en un esfuerzo por hacer de Qt un framework mejor.
En este tema resumimos esos cambios en Qt Concurrent, y proporcionamos una guía para manejarlos.
QtConcurrent::run()
QtConcurrent::run() ha sido mejorado para trabajar con un número variable de argumentos, por lo que las firmas han cambiado a:
// run template <typename T> QFuture<T> run(Function &&f, Args &&...args) // run with a QThreadPool argument template <typename T> QFuture<T> run(QThreadPool *pool, Function &&f, Args &&...args)
Como efecto secundario, si f es un puntero a una función miembro, el primer argumento de args debería ser el objeto para el que está definido ese miembro (o una referencia, o un puntero a él). Así que en lugar de escribir:
QImage image = ...; QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba);
Hay que escribir:
QFuture<void> future = QtConcurrent::run(&QImage::invertPixels, &image, QImage::InvertRgba);
Otro efecto secundario es que QtConcurrent::run() ya no funcionará con funciones sobrecargadas. Por ejemplo, el código siguiente no compilará:
void foo(int arg); void foo(int arg1, int arg2); ... QFuture<void> future = QtConcurrent::run(foo, 42);
La solución más fácil es llamar a la función sobrecargada a través de lambda:
QFuture<void> future = QtConcurrent::run([] { foo(42); });
O puede decirle al compilador qué sobrecarga elegir usando static_cast:
QFuture<void> future = QtConcurrent::run(static_cast<void(*)(int)>(foo), 42);
O qOverload:
QFuture<void> future = QtConcurrent::run(qOverload<int>(foo), 42);
Otros métodos de QtConcurrent no tienen cambios de comportamiento y no introducen rupturas de compatibilidad de código fuente.
© 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.