QFuture的使用方式
QFuture是Qt框架中用于处理异步任务和获取异步操作结果的一个类。
它通常与QtConcurrent::run一起使用,可以方便地启动一个异步任务,并在任务完成时获取结果。
QFutureWatcher监控结果是否可以获取,future.result()来获取结果。
示例:计算斐波那契数列
假设我们有一个计算斐波那契数列的函数,这个函数可能需要一些时间来完成,因此我们希望在后台线程中运行它,而主线程可以继续执行其他任务。
当计算完成时,我们希望获取结果并更新UI。
1. 定义计算斐波那契数列的函数
#include <QtConcurrent>
#include <QFuture>
#include <QFutureWatcher>
#include <QDebug>
#include <QApplication>// 计算斐波那契数列的函数
int fibonacci(int n)
{if (n <= 1)return n;return fibonacci(n - 1) + fibonacci(n - 2);
}
2. 使用QtConcurrent::run
启动异步任务
使用QtConcurrent::run启动一个异步任务,并获取一个QFuture对象。
QFuture对象可以用来监控任务的执行状态和获取任务的结果。
int main(int argc, char *argv[])
{QApplication app(argc, argv);// 启动异步任务QFuture<int> future = QtConcurrent::run(fibonacci, 30); // 计算第30个斐波那契数// 创建一个QFutureWatcher对象来监控任务QFutureWatcher<int> watcher;QObject::connect(&watcher, &QFutureWatcher<int>::finished, [&]() { //捕获列表:[&],表示捕获当前作用域中的所有变量的引用。// 任务完成时的槽函数int result = future.result(); // 获取任务的结果qDebug() << "Fibonacci result:" << result;});// 将QFuture与QFutureWatcher关联watcher.setFuture(future);// 主线程继续执行其他任务qDebug() << "Main thread is running other tasks...";// 防止程序立即退出return app.exec();
}