这篇展示了如何监听任务的进度。

QtConcurrent Progress Dialog使用QFutrueWathcer类去监听任务进程进展。

代码如下:

progressdialog.pro

QT += concurrent widgets
CONFIG += consoleSOURCES += main.cpptarget.path = $$[QT_INSTALL_EXAMPLES]/qtconcurrent/progressdialog
INSTALLS += target

main.cpp

#include <QtWidgets>
#include <QtConcurrent>#include <functional>using namespace QtConcurrent;int main(int argc, char **argv)
{QApplication app(argc, argv);const int iterations = 20;// Prepare the vector.QVector<int> vector;for (int i = 0; i < iterations; ++i)vector.append(i);// Create a progress dialog.QProgressDialog dialog;dialog.setLabelText(QString("Progressing using %1 thread(s)...").arg(QThread::idealThreadCount()));// Create a QFutureWatcher and connect signals and slots.QFutureWatcher<void> futureWatcher;QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, &dialog, &QProgressDialog::reset);QObject::connect(&dialog, &QProgressDialog::canceled, &futureWatcher, &QFutureWatcher<void>::cancel);QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressRangeChanged, &dialog, &QProgressDialog::setRange);QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressValueChanged,  &dialog, &QProgressDialog::setValue);// Our function to computestd::function<void(int&)> spin = [](int &iteration) {const int work = 1000 * 1000 * 40;volatile int v = 0;for (int j = 0; j < work; ++j)++v;qDebug() << "iteration" << iteration << "in thread" << QThread::currentThreadId();};// Start the computation.futureWatcher.setFuture(QtConcurrent::map(vector, spin));// Display the dialog and start the event loop.dialog.exec();futureWatcher.waitForFinished();// Query the future to check if was canceled.qDebug() << "Canceled?" << futureWatcher.future().isCanceled();
}

解析下:

这里设置了20个资源。

①关联完成;

②关联退出;

③将QFutureWatcher的范围设置到QProcessDialog中;

④将QFutureWatcher的当前进度值设置到QProcessDialog中。

这里创建了一个工作函数:

传入一个资源(对应的是iteration),然后里面就是去熬时间的代码。

下面就是开始任务的函数:

先看下这个函数,也就是启动函数:

每一个sequence都会调用一次function。这个sequence的每一项以引用的方式传给这个函数,每一次调用函数都会对sequence里面的项进行修改。

再看下这个函数:

设置监听,监听QFuture,上面的Qt::Concurrent就是会返回QFuture。然后会发出上面那4个信号。

Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析相关推荐

  1. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  2. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

  3. Qt文档阅读笔记-QtConcurrent Map Example官方实例解析

    这个例子对数据处理有很大的用处,在此记录下. 官方对应这个例子解析如下: QtConcurrent Map exapmle展示了使用QtConcurrent API的同步(阻塞)接口对图片进行拉伸.这 ...

  4. Qt文档阅读笔记-FileDialog QML Type官方解析与实例

    目录 官方解析 博主例子 官方解析 FileDialog是基于文件的选择器,可以选择文件或文件夹,创建文件,这个Dialog初始化是不可见的,得需要设置他为visible或调用open()即可. 下面 ...

  5. Qt文档阅读笔记-Simple Anchor Layout Example解析

    这个例子展示了锚布局在视图场景中的使用. 此篇例子其实就是教QGraphicsAnchorLayout类的使用. 首先创建了QGraphicScene(场景),3个widgets(a,b,c),以及一 ...

  6. Qt文档阅读笔记-Label QML Type官方解析及实例

    目录 官方解析 博主例子 官方解析 Label扩展了父类Text中的styling和font.Label同样是有可视化的background项. Label {text: "Label&qu ...

  7. Qt文档阅读笔记-Threaded Fortune Server Example解析

    Fortune服务端展示了如何去创建一个多线程服务端.此实例与Fortune客户端运行. 首先继承QTcpServer重写下子类,方便实现多线程. 这里需要两个类:一个是QTcpServer的子类,一 ...

  8. Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析

    目录 Multiple Inheritance Example 实例解析 Automatic Connections解析 Multiple Inheritance Example 实例解析 这个实例很 ...

  9. Qt文档阅读笔记-TextEdit QML Type官方解析及实例

    目录 官方解析 博主栗子 官方解析 TextEdit展示了一个可编辑的一块,是有格式的文本. 他同样能展示普通文本和富文本: TextEdit {width: 240text: "<b ...

最新文章

  1. VS 2010测试解读2-给测试用例做标签
  2. vm虚拟机安装系统后出现operating system not found解决办法(VM装ghost 不能进系统的解决方法)
  3. Java中Date及Timestamp时间相关内容【转】
  4. 005_FreeMarker入门程序
  5. lua 收不到服务器发来消息,lua 学习之错误处理
  6. go grpc测试_Grpc — 整体性能测试
  7. 2017/Province_Java_B/4/魔方状态
  8. Microsoft Build 2018 直播来啦!
  9. 怎样进入pe重建硬盘
  10. C#LeetCode刷题之#203-删除链表中的节点(Remove Linked List Elements)
  11. 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?
  12. 浅谈Session与Cookie的区别与联系
  13. Ctrix-XenApp中误删应用服务器,如何重新添加
  14. B75经典门户商业版Discuz模板下载
  15. Python3使用SMTP协议发送电子邮件
  16. java工具类书写规范
  17. linux挂载,格式化
  18. AE开发之主窗体通过Base Comand和IHookHelper接口向子窗体转递图层信息方法模板
  19. 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
  20. python游戏背景音乐循环播放_9.2 播放背景音乐_师傅带徒弟学:Python视频课程之游戏开发引擎Cocos2d-Python_Python视频-51CTO学院...

热门文章

  1. (一二六)第十一章编程练习
  2. centos5.3安装vmware
  3. C/C++学习笔记:C语言实现任意进制转换,代码全解析!
  4. 世界是你们的,也是我们的,但终究是他们的!致程序员
  5. 准程序员必看!该怎么规划自己的职业人生,看看前辈们给的建议!
  6. 在深圳呆那么就感觉伤心了有木有?
  7. 飞鸽传书:服务器开发系列—系统构架
  8. 《南方都市报》:三鹿集团300万摆平搜索引擎?
  9. 经典面试题(34):以下代码将输出的结果是什么?
  10. 经典面试题(23):以下代码将输出的结果是什么?