多线程优点:有时程序运行,界面卡顿,操作数据流大,执行任务多等等问题均可采用多线程,
把主线程一些任务分流给子线程,能明显减轻主线程压力,提稿程序运行速度。
线程创建一般有两种方式,其中最简单的一种是创建一个继承QObject类的文件,更改其继承对象为QThread,重写protected::void run()方法,在主界面调用start()函数便可开始线程运行。
如下是案例代码展示:
案例:在labal控件上显示一个数字,数字从0数到10000截止,在设置一个按钮,点击按钮,开始显示数字。
myThread.cpp(主窗口)
#include "myThread.h"
#include "qthread1.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);
qDebug() << "主线程对象地址:" << QThread::currentThread();
//创建子线程
qthread1 *son = new qthread1;
connect(son, &qthread1::setNum, this, [=](int num) {
ui.label->setNum(num);
});
connect(ui.startBtn, &QPushButton::clicked, this, [=]() {
//启动子线程
son->start();
});
}
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;
};
qthread1.cpp(子线程对象文件)
#include "qthread1.h"
#include <QDebug>
void qthread1::run()
{
qDebug() << "先前线程对象的地址:" << QThread::currentThread();
int num = 0;
while (true)
{
emit setNum(num++);
if (num == 10000)
{
break;
}
QThread::usleep(1);
}
qDebug()<<"run()线程执行完毕,子线程退出";
}
qthread1.h
#pragma once
#include <QThread>
class qthread1 : public QThread
{
Q_OBJECT
public:
qthread1();
~qthread1();
protected:
void run();
signals:
void setNum(int num);//发送
};
效果展示
本项目案例转载与互联网