QFuture的使用方式

发布于:2025-06-11 ⋅ 阅读:(48) ⋅ 点赞:(0)

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