QFuture 使用笔记

【QT Creator学习记录】QTConcurrent,QFuture,QFutureWatcher示例代码 了解QTConcurrent,QFuture,QFutureWatcher都是干啥用的,以及简单使用的代码示例 阅读详情

1. QFuture详解

概念:
QFuture是Qt库中的一个类,它代表了一个异步计算的结果。当你启动一个耗时的操作,如文件读取、网络请求或复杂的计算任务时,你不希望这些操作阻塞主线程,从而影响用户界面的响应性。QFuture就是用来处理这种异步操作的,它允许你在任务完成后获取结果,而不必阻塞主线程。

用途:

  • 异步执行任务,避免阻塞UI线程。
  • 监控任务的进度和状态。
  • 获取异步任务的结果。

主要特点:

  • QFuture是模板类,可以处理不同类型的结果。
  • 提供了查询任务状态(如是否开始、是否完成、是否取消等)的方法。
  • 可以与QFutureWatcher结合使用,通过信号和槽机制来监控任务的进度和结果。

2. 信号和槽列表在QFuture中的作用和用法

在Qt中,信号和槽是一种对象间通信的机制。当某个特定事件发生时,一个对象可以发射(emit)一个信号,而另一个对象的槽(slot)可以被这个信号触发。

对于QFuture和相关的QFutureWatcher类,这种机制尤为重要,因为它允许你在异步任务的不同阶段执行特定的操作。

主要信号:

  • started(): 当异步任务开始时发射。
  • finished(): 当异步任务完成时发射。
  • progressValueChanged(int progress): 当任务进度改变时发射,携带当前进度值。
  • progressRangeChanged(int minimum, int maximum): 当任务的进度范围改变时发射。
  • progressTextChanged(const QString &progressText): 当任务的进度文本改变时发射。

槽的用法:
你可以将上述信号连接到任何你定义的槽函数上,以便在任务的不同阶段执行自定义的操作。例如,你可以在任务开始时显示一个加载动画,在任务完成时隐藏加载动画并显示结果。

3. 示例代码

下面是一个简单的示例,展示了如何使用QFuture和信号槽机制来异步执行一个函数,并在任务完成时更新UI。

#include <QtConcurrent>  
#include <QFutureWatcher>  
#include <QObject>  
#include <QDebug>  
  
// 假设我们有一个耗时的函数  
QString longRunningFunction(int n) {  
    QThread::sleep(n); // 模拟耗时操作  
    return QString("Completed after %1 seconds").arg(n);  
}  
  
class MyObject : public QObject {  
    Q_OBJECT  
public:  
    MyObject() {  
        connect(&watcher, &QFutureWatcher<QString>::finished
            , this, &MyObject::handleFinished);  
    }  
  
    void startLongRunningTask(int seconds) {  
        future = QtConcurrent::run(longRunningFunction, seconds);  
        watcher.setFuture(future);  
    }  
  
private slots:  
    void handleFinished() {  
        qDebug() << "Task finished, result:" << watcher.result();  
    }  
  
private:  
    QFuture<QString> future;  
    QFutureWatcher<QString> watcher;  
};  
  
int main() {  
    MyObject obj;  
    obj.startLongRunningTask(5); // 启动一个耗时5秒的任务  
    // ... 其他代码,如事件循环等 ...  
}

在这个示例中,MyObject类使用QFuture和QFutureWatcher来异步执行longRunningFunction函数。当任务完成时,QFutureWatcher会发射finished信号,这个信号被连接到handleFinished槽函数上,从而处理任务的结果。

QFuture和QFutureWatcher简介 简要介绍QFuture和QFutureWatcher的功能和用途 阅读详情

相关推荐

Qt 之 QFuture

QFuture 类代表一个异步计算的结果。

青春不老,奋斗不止! 1万+

QFuture的使用:多线程与进度条

介绍 QFuture 类可以用来获取异步计算的结果(类似 std::future),一般配合 Qt Concurrent 模块和 QFutureWatcher 类工作。在 Qt Creator 中搜索 concurrent 可以看到一些相关示例。官方示例中, QFuture 一般和QFutureWatcher 配合,因为 QFuture 不是 QObject 子类,没有信号槽。但是 QFuture 相关的接口会触发QFutureCallOutEvent 事件,QFutureWatcher 接收该事件...

龚建波 1万+

Qt Concurrent框架详解(QFuture、QFutureWatcher)

Qt Concurrent是Qt提供的一个并发编程框架,用于简化多线程和并行计算的开发。它提供了一组易于使用的函数和类,可以方便地在多线程环境下处理并发任务。有以下特点:Qt Concurrent提供了一组高级函数和类,使多线程和并行计算变得简单易用。开发者无需显式地创建和管理线程,而是通过调用Qt Concurrent提供的函数实现并发任务。Qt Concurrent能够根据可用的线程数自动将大的问题拆分成更小的任务,并分配给不同的线程并行执行。这样能够最大程度地利用系统资源,提高并发执行效率。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 4183

qt QFuture详解

QFuture是Qt框架中的一个类,它用于表示一个异步计算的结果。QFuture与QtConcurrent模块紧密集成,允许开发者在不直接管理线程的情况下执行并行计算任务,并通过QFuture对象获取任务的结果或监视任务的状态。QFuture提供了一个通用的接口,用于访问异步操作的结果,而无需关心底层是如何实现异步计算的。

ckg3824278的博客 1489

Qt中的QFuture

使用QFuture,可以有效地避免因长时间运行的任务而导致主线程被阻塞的问题,提高程序的性能和用户体验。上述代码中,我们使用QtConcurrent中的run函数创建了一个QFuture类型的对象future,该对象将在另一个线程中异步地执行函数返回值为QStringList类型的lambda表达式。上述代码中,我们使用QtConcurrent::mapped函数对list中的每个元素进行处理,并将结果以QList的形式返回,并且使用QFuture的results()函数获取所有结果。

CyberBladeX的博客 709

告别ROS1!在Ubuntu 22.04上为VINS-Fusion适配ROS2 Humble的完整踩坑记录

本文详细记录了在Ubuntu 22.04上将VINS-Fusion从ROS1迁移到ROS2 Humble的完整过程,包括环境搭建、依赖管理、核心代码适配及性能优化。通过实战案例和调试技巧,帮助开发者高效解决迁移过程中的常见问题,提升系统稳定性和性能。

weixin_42628688的博客 281

【笔记】QFuture异步线程的基本使用

QFuture类表示异步计算的结果。 1、基本调用 #include <QCoreApplication> #include <QtConcurrent/QtConcurrentRun> #include <QDebug> void print(const QString &name) { qDebug() << name; } int main(int argc, char *argv[]) { QCoreApplica

weixin_43284805的博客 665

osgEarth实战:5分钟搞定3DTiles模型加载(附完整配置代码)

本文提供了一份osgEarth加载3DTiles模型的实战指南。通过详解核心Earth文件配置与精简的C++集成代码,帮助开发者快速在三维地球场景中集成倾斜摄影与BIM等海量模型,并分享了性能调优与常见问题排查技巧,有效提升开发效率。

jjj34的博客 479

Qt文档阅读笔记-QFuture官方解析及实例

QFurture是异步进行的,可以开1个或多个线程。返回值可以是任意类型的。当调用result(),resultAt(),results()返回值无效时QFuture将会等待result返回正常为止。可以使用isResultReadAt()函数去判断是否有数据。QFuture返回值可以是多个,使用resultCount()函数可以得到其数量。 还有很多函数就不一一介绍了。直接在代码中演示吧! 下面是一个官方例子: runfunction.pro QT += concurrent widg...

IT1995的博客 1955

Cadence IC5141保姆级教程:Bandgap电路四大仿真(稳定性/噪声/启动/PSRR)完整流程与调参心得

本文提供Cadence IC5141中Bandgap电路的四大仿真(稳定性仿真、噪声仿真、启动仿真、PSRR仿真)的完整流程与调参心得。从原理图检查到ADE L配置,详细解析各仿真步骤的关键参数设置与优化策略,帮助工程师高效完成电路设计与性能调优。

weixin_30399821的博客 1651

JaCoCo报告聚合的5个常见坑点排查指南:从单模块到多模块的完整避坑手册

本文详细解析了JaCoCo在多模块Maven项目中生成聚合报告时的5个常见问题,包括多模块报告聚合失效、覆盖率数据不一致、增量构建导致的覆盖率丢失等,并提供了具体的配置示例和解决方案。帮助开发者高效排查和解决JaCoCo报告聚合中的各种疑难杂症,提升代码覆盖率分析的准确性和效率。

weixin_27918373的博客 250

QFutureWatcher & QFuture 使用

QFutureWatcher & QFuture 使用

如梦人身 3208

Multisim 11.0的安装破解汉化步骤

15:打开注册机,选择管理员运行,默认第一项,选择生成文件路径,这里不要随意选择,要找到你安装Multisim安装路径下Shard下的License Manager路径下,否则会报错,破解失败。14:后面会出现一个更新提示,选择否,然后选择重启电脑后,先不要选择重启电脑,在这里出现了问题(可能敲击回车,默认去重启电脑了),所以我说不要重启电脑,重启破解时右下角出现这,点击否。17:重启电脑,如果前面重启过,那可以跳过重启,应用程序下找到下图所示,启动。16:点击确认覆盖,路径下生成了该文件。

qq_53260940的博客 2371

Qt QFuture详解

Qt QFuture详解

m0_73443478的博客 4622

深信服桌面云实战:从零部署到高效运维的关键配置指南

本文提供了一份深信服桌面云从零部署到高效运维的实战指南。内容涵盖项目启动阶段的资源、网络与存储规划,详细演示了VMP与VDC平台的安装与对接,并深入讲解了制作虚拟机模板、配置用户体系、优化终端策略等核心步骤。最后,分享了包括CPU公平分配、智能调度在内的关键性能调优与高阶运维技巧,旨在帮助管理员构建稳定、高效的云桌面环境。

blockchain9miner的博客 451

天线学习笔记——串馈网络设计

工程中通常更倾向于使用50Ω、70.7Ω、100Ω的固定阻抗的带宽,实际中可以分别使用固定阻抗的带宽和计算得到的带宽进行仿真,观察二者的性能,取性能更优者即可。本系列是一个记录天线设计的笔记,分享出来也希望能够帮助到大家,后续本系列文章还会不定期更新,如有需要可关注,任何问题均可在评论区或私信提出,看到必回。如果对大家有帮助可进行打赏哦~

Ethan的博客 7880

使用QFuture类监控异步计算的结果

在Qt中,为我们提供了好几种使用线程的方式,除了最基本的QThread类之外,还有QRunnable抽象类,类似于Java的runnable接口,还可以使用moveToThread() 函数,还有更高级的QtConcurrent框架。而今天,我们要看的QFuture就是和QtConcurrent框架API配合使用的一个类。新来看Qt帮助文档对这个类的详细介绍。 QFuture类用来表示一个异步计

3274

Android 11.0 app添加校验锁(输入密码才能进入app)

11.0定制化开发中客户要求给app添加锁,就是点击app 图标时,会弹出Dialog,需要输入密码才能进入app中,就是应用校验锁, 最开始想到在Launcher3中实现,但是如果更换了默认Launcher 又不行了 所以最终还是得拦截app启动Activity 从这里入手了 Launcher与APP是在两个不同的进程中,他们之间的通信是通过Binder完成的,点击Launcher上的某个APP,这时会调用Launcher的startActivitySafely方法。 public boolean sta

安卓兼职framework和app工程师的博客 1952

QtConcurrent和QFuture的使用

Concurrent是并发的意思,而QtConcurrent同std一样,是一个命名空间(namespace),想使用它需要先在Project工程文件中导入模块,并包含头文件QtConcurrent提供了一些高级的 API,使得在编写多线程的时候,无需使用低级线程原语,如读写锁,等待条件或信号。使用QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。QtConcurrent中使用最多的是它的run()函数,每调用一次函数,就会新建立一个线程运行我们让它执行的函数。

Sakuya__的博客 1699

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【QT教程】QT6QFuture与并发

QT6的并发编程概述QT6的并发编程概述Qt6是一个跨平台的C++图形用户界面应用程序框架,它为开发桌面、移动、嵌入式和基于web的应用程序提供了一套完整的工具和库。Qt6在并发编程方面提供了许多新的特性和改进,使得开发高并发的应用程序变得更加简单和高效。QFuture和Qt6并发编程Qt6引入了QFuture类,用于支持并发编程。QFuture是一个高级接口,用于异步执行任务和获取其结果。它提供了一种简单的方式来执行计算密集型或阻塞型操作,而不需要编写复杂的线程管理代码。

QT性能优化QT原理源码QT界面美化 2332

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

QConcurrent、QFuture和QFutureWatcher

QFuture: QFuture类代表了一个异步调用的结果。而这个异步调用需要使用Qt Concurrent架构的API。 QFuture让线程可以通过某个后期产生的结果来实现同步。这个结果可以是任何拥有默认构造函数和拷贝构造函数的类型。如果这个结果在调用其result(), resultAt(), 或者 results()方法时还没有准备好,QFuture将会一直等到结果准备好。可以通过它的isResultReadyAt()方法来检测结果是否准备好。对于QFuture对象需要准备多个结果的情况,其resu

BUG之友的博客 1208

Qt之QFuture

简述 QFuture 类代表一个异步计算的结果。 要启动一个计算,使用 Qt之Concurrent框架 中的 APIs 之一。 QFuture 允许线程与一个或多个结果同步,这些结果将在稍后的时间点准备就绪,该结果可以是具有默认构造函数和拷贝构造函数的任何类型。如果一个结果在调用 result()、resultAt() 或 results() 函数时不可用,QFuture 将进行等待,直到结果可用...

jiangxiaoyu20的博客 512

QFuture的使用

需要注意的是,由于异步操作可能会在另一个线程中执行,因此在访问操作的返回值时可能需要加锁以避免数据竞争。此外,如果异步操作涉及 GUI 元素,则需要使用。是 Qt 提供的一个类,用于表示异步操作的返回值或状态。异步操作指的是那些不会阻塞主线程的操作,例如文件读写、网络请求、计算等等。等等)来进行封装和管理。这些函数会在一个单独的线程中执行指定的函数,并返回。等函数将操作的结果传递到主线程中进行 GUI 更新。在执行异步操作时,可以使用。下面是一个简单的使用。

qq_42629529的博客 2013

QFuture QFutureWatcher

QFuture, QFutureWatcher 第一次看到这两个类,感觉很有意思,也很有用。整理如下: 先来说说QFuture: QFuture类代表了一个异步调用的结果。而这个异步调用需要使用Qt Concurrent架构中的API。 QFuture让线程可以通过某个后期产生的结果来实现同步。这个结果可以是任何拥有默认构造函数和拷贝构造函数的类型。如果这个结果在调

证券指标的专栏 2234
上一篇: 类中使用QtConcurrent::run
下一篇: QMatrix详解
低配天才
博客等级 码龄10年 277粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值