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();
}
相关推荐
梁诚斌15 分钟前
使用OpenSSL接口读取pem编码格式文件中的证书
开发语言·c++
2301_803554524 小时前
c++中的绑定器
开发语言·c++·算法
海棠蚀omo5 小时前
C++笔记-位图和布隆过滤器
开发语言·c++·笔记
消失的旧时光-19435 小时前
c++ 的标准库 --- std::
c++·jni
GiraKoo6 小时前
【GiraKoo】C++11的新特性
c++·后端
不午睡的探索者6 小时前
告别性能瓶颈!Python 量化工程师,进击 C++ 高性能量化交易的“必修课”!
c++·github
OpenC++6 小时前
【C++】观察者模式
c++·观察者模式·设计模式
老歌老听老掉牙6 小时前
粒子群优化算法实现与多维函数优化应用
c++·pso·粒子群算法
myloveasuka6 小时前
信号操作集函数
linux·运维·服务器·c语言·c++·vscode
山野万里__6 小时前
C++与Java内存共享技术:跨平台与跨语言实现指南
android·java·c++·笔记