Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析
这篇展示了如何监听任务的进度。
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解析相关推荐
- Qt文档阅读笔记-Fortune Client Example实例解析
目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...
- Qt文档阅读笔记-QML Canvas的官方解析及实例
目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...
- Qt文档阅读笔记-QtConcurrent Map Example官方实例解析
这个例子对数据处理有很大的用处,在此记录下. 官方对应这个例子解析如下: QtConcurrent Map exapmle展示了使用QtConcurrent API的同步(阻塞)接口对图片进行拉伸.这 ...
- Qt文档阅读笔记-FileDialog QML Type官方解析与实例
目录 官方解析 博主例子 官方解析 FileDialog是基于文件的选择器,可以选择文件或文件夹,创建文件,这个Dialog初始化是不可见的,得需要设置他为visible或调用open()即可. 下面 ...
- Qt文档阅读笔记-Simple Anchor Layout Example解析
这个例子展示了锚布局在视图场景中的使用. 此篇例子其实就是教QGraphicsAnchorLayout类的使用. 首先创建了QGraphicScene(场景),3个widgets(a,b,c),以及一 ...
- Qt文档阅读笔记-Label QML Type官方解析及实例
目录 官方解析 博主例子 官方解析 Label扩展了父类Text中的styling和font.Label同样是有可视化的background项. Label {text: "Label&qu ...
- Qt文档阅读笔记-Threaded Fortune Server Example解析
Fortune服务端展示了如何去创建一个多线程服务端.此实例与Fortune客户端运行. 首先继承QTcpServer重写下子类,方便实现多线程. 这里需要两个类:一个是QTcpServer的子类,一 ...
- Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析
目录 Multiple Inheritance Example 实例解析 Automatic Connections解析 Multiple Inheritance Example 实例解析 这个实例很 ...
- Qt文档阅读笔记-TextEdit QML Type官方解析及实例
目录 官方解析 博主栗子 官方解析 TextEdit展示了一个可编辑的一块,是有格式的文本. 他同样能展示普通文本和富文本: TextEdit {width: 240text: "<b ...
最新文章
- VS 2010测试解读2-给测试用例做标签
- vm虚拟机安装系统后出现operating system not found解决办法(VM装ghost 不能进系统的解决方法)
- Java中Date及Timestamp时间相关内容【转】
- 005_FreeMarker入门程序
- lua 收不到服务器发来消息,lua 学习之错误处理
- go grpc测试_Grpc — 整体性能测试
- 2017/Province_Java_B/4/魔方状态
- Microsoft Build 2018 直播来啦!
- 怎样进入pe重建硬盘
- C#LeetCode刷题之#203-删除链表中的节点(Remove Linked List Elements)
- 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?
- 浅谈Session与Cookie的区别与联系
- Ctrix-XenApp中误删应用服务器,如何重新添加
- B75经典门户商业版Discuz模板下载
- Python3使用SMTP协议发送电子邮件
- java工具类书写规范
- linux挂载,格式化
- AE开发之主窗体通过Base Comand和IHookHelper接口向子窗体转递图层信息方法模板
- 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
- python游戏背景音乐循环播放_9.2 播放背景音乐_师傅带徒弟学:Python视频课程之游戏开发引擎Cocos2d-Python_Python视频-51CTO学院...