C++11 Qt之QFutureWatcher lambda

2023-10-07 22:36
文章标签 c++ qt lambda qfuturewatcher

本文主要是介绍C++11 Qt之QFutureWatcher lambda,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lambda 介绍

 Lambda 函数也叫匿名函数, 是C++ 11中新增的特性;谁用谁知道,哈;
1. Lambda函数的好处

Lambda函数使代码变得更加紧凑、更加结构化和更富有表现力;

lambda在c++作用主要是作为内嵌函数,逻辑更加清楚,代码可读性更好;

【QT】Qt之QFutureWatcher

简述

QFuture 表示异步计算的结果QFutureWatcher 则允许使用信号和槽监视 QFuture,也就是说,QFutureWatcher 是为 QFuture 而生的。

// 实例化对象,并连接到 finished() 信号。
MyClass myObject;
QFutureWatcher<int> watcher;
connect(&watcher, SIGNAL(finished()), &myObject, SLOT(handleFinished()));// 开始计算
QFuture<int> future = QtConcurrent::run(...);
watcher.setFuture(future);

 使用 lambda

     if(nullptr == WidgetWatcher){WidgetWatcher = new QFutureWatcher<void>;connect(WidgetWatcher, &QFutureWatcher<void>::finished, this, [=]() {qDebug()<<"finish threadid "<<QThread::currentThreadId();mQProgressDialog->close();});}QFuture<void> future = QtConcurrent::run([=]() {//slotShowInsertionWidget();qDebug()<<"111 threadid "<<QThread::currentThreadId();QThread::sleep(3);getTextStaticFun();});WidgetWatcher->setFuture(future);

传参:

// 传入 当前 this
QFuture<void> future = QtConcurrent::run([&]() 

还可以使用 QProgressDialog  作为阻堵 函数,变成同步;

  progress->exec();

完成后,关闭;

        connect(WidgetWatcher, &QFutureWatcher<void>::finished, this, [=]() {qDebug()<<"finish threadid "<<QThread::currentThreadId();mQProgressDialog->close();});

MyQProgressDialog 

#ifndef MYPROGRESSDIALOG_H
#define MYPROGRESSDIALOG_H#include<QProgressDialog>
class  MyProgressDialog :public QProgressDialog
{Q_OBJECT
public:MyProgressDialog(const QString &labelText);
};#include "myprogressdialog.h"
#include<QProgressBar>
MyProgressDialog::MyProgressDialog(const QString &labelText)
{setAutoClose(false);		//进度达到最大值时不关闭,默认为true// setLabelText("正在导出数据,请稍后...");	//显示的文本setLabelText(labelText);setCancelButton(NULL);			//不显示取消按钮setWindowModality(Qt::WindowModal);//mQProgressDialog->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowStaysOnTopHint);setMinimumWidth(600);// setWindowModality(Qt::ApplicationModal);//setModal(true);QProgressBar * prog = new QProgressBar(this);prog->setTextVisible(false);//prog->setStyleSheet("QProgressBar{  max-height: 20px;\nbackground: #323232;\nborder-radius: 10px;\ntext-align:center;\n}\nQProgressBar::chunk {  background: #2C6ED5;\nborder-radius: 10px;\n}");prog->setRange(0, 0);setBar(prog);//mQProgressDialog->hide();reset();
}

这篇关于C++11 Qt之QFutureWatcher lambda的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160880

相关文章

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性