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();
}
相关推荐
xiaoye-duck15 分钟前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
UIU1144 小时前
P1481 魔族密码
c++·算法·动态规划
闻缺陷则喜何志丹10 小时前
【C++特性】四种类型转
c++·算法·类型转换
奇树谦11 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
apcipot_rain13 小时前
C++转Java日记(02)
java·开发语言·c++
杜 硕14 小时前
从零开始的C++生活——第七讲——02
开发语言·c++·生活
Rabitebla1 天前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
西西弗Sisyphus1 天前
C++ 超时互斥锁(Timed Mutex):std::timed_mutex 与 std::unique_lock
c++
今天要早睡_1 天前
C++01_入门基础复习
开发语言·c++
Fuyo_11191 天前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试