Qt多线程基础--创建方式2

多线程优点:有时程序运行,界面卡顿,操作数据流大,执行任务多等等问题均可采用多线程,

                       把主线程一些任务分流给子线程,能明显减轻主线程压力,提高程序运行速度。

线程创建一般有两种方式。

创建方式1:最简单的一种是创建一个继承QObject类的文件,更改其继承对象为QThread,重写protected::void run()方法,在主界面调用start()函数便可开始线程运行。

创建方式2:该方式创建主要也是创建一个继承QObject类的文件,但不需更改继承对象,也不许                        重写run()方法,只需在主线程界面创建子线程类对象,并把需要执行的任务移                             动到子线程中,就可使用线程方法。

如下是案例代码展示:

案例:在labal控件上显示一个数字,数字从0数到10000截止,在设置一个按钮,点击按钮,开始显示数字。
myThread.cpp(主窗口)

#include "myThread.h"
#include "qthread2.h"
#include <QDebug>
#include <QFont>
myThread::myThread(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
 
	ui.label->setAlignment(Qt::AlignCenter);//设置文本显示居中
	QFont font;
	font.setPixelSize(200);//设置文本显示字体大小
	ui.label->setFont(font);
 
 // 创建线程对象
    QThread* sub = new QThread;
    // 创建工作的类对象
    // 千万不要指定给创建的对象指定父对象
    // 如果指定了: QObject::moveToThread: Cannot move objects with a parent
   qthread2* son = new  qthread2;
    // 将工作的类对象移动到创建的子线程对象中
     son->moveToThread(sub);
    // 启动线程
    sub->start();
    // 让工作的对象开始工作, 点击开始按钮, 开始工作
    connect(ui->startBtn, &QPushButton::clicked, son, &qthread2::working);
    // 显示数据
    connect(son, &qthread2::setNum, this, [=](int num)
    {
        ui->label->setNum(num);
    });

}
 
myThread::~myThread()
{}

myThread.h(此文件无改动)

​
#include <QtWidgets/QMainWindow>
#include "ui_myThread.h"
 
class myThread : public QMainWindow
{
    Q_OBJECT
 
public:
    myThread(QWidget *parent = nullptr);
    ~myThread();
 
private:
    Ui::myThreadClass ui;
};
 
​

qthread2.cpp(子线程对象文件)

#include "qthread2.h"
#include <QDebug>
void qthread2::working()
{
	qDebug() << "先前线程对象的地址:" << QThread::currentThread();
	int num = 0;
	while (true)
	{
		emit setNum(num++);
		if (num == 10000)
		{
			break;
		}
		QThread::usleep(1);
	}
	qDebug()<<"run()线程执行完毕,子线程退出";
}

qthread2.h

#pragma once
#include <QThread>
class qthread1  : public QThread
{
	Q_OBJECT
 
public:
	qthread2();
	~qthread2();
protected:
	void working();
signals:
	void setNum(int num);//发送
 
};

效果展示

 ​​​

本项目案例转载与互联网 原作者与原文链接如下

爱编程的大丙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值