Änderungen an Qt Concurrent
Qt 6 sind das Ergebnis bewusster Bemühungen, das Framework effizienter und benutzerfreundlicher zu gestalten.
Wir bemühen uns, bei jeder Version die Binär- und Quellkompatibilität für alle öffentlichen APIs aufrechtzuerhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.
In diesem Thema fassen wir diese Änderungen in „ Qt Concurrent “ zusammen und geben Hinweise zu deren Handhabung.
QtConcurrent::run()
QtConcurrent::run() wurde so verbessert, dass es nun mit einer variablen Anzahl von Argumenten funktioniert; daher wurden die Signaturen wie folgt geändert:
// 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)Als Nebeneffekt gilt: Wenn „ f “ ein Zeiger auf eine Memberfunktion ist, sollte das erste Argument von „ args “ das Objekt sein, für das diese Memberfunktion definiert ist (oder eine Referenz bzw. ein Zeiger darauf). Anstatt also zu schreiben:
QImage image = ...;
QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba);muss man nun schreiben:
QFuture<void> future = QtConcurrent::run(&QImage::invertPixels, &image, QImage::InvertRgba);Ein weiterer Nebeneffekt ist, dass ` QtConcurrent::run() ` nicht mehr mit überladenen Funktionen funktioniert. Der folgende Code lässt sich beispielsweise nicht kompilieren:
void foo(int arg);
void foo(int arg1, int arg2);
...
QFuture<void> future = QtConcurrent::run(foo, 42);Die einfachste Abhilfe besteht darin, die überladene Funktion über ein Lambda-Ausdruck aufzurufen:
QFuture<void> future = QtConcurrent::run([] { foo(42); });Oder Sie können dem Compiler mithilfe von ` static_cast` mitteilen, welche Überladung gewählt werden soll:
QFuture<void> future = QtConcurrent::run(static_cast<void(*)(int)>(foo), 42);Oder „ qOverload “:
QFuture<void> future = QtConcurrent::run(qOverload<int>(foo), 42);Andere Methoden von ` QtConcurrent ` weisen keine Verhaltensänderungen auf und führen zu keinen Kompatibilitätsbrüchen im Quellcode.
© 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.