需要创建一个线程类的子类,让其继承QT中的线程类 QThread,比如:
需要创建一个线程类的子类,让其继承Qt中的子线程类
1.创建
在Qt中继承QThread是常规的实现线程的方式,只需要继承后重写其中的run()函数
(大多数线程操作都是重写run()函数)并实现自己的线程工作即可。
// ThreadObject.h
#pragma once
#include <QThread>
class ThreadObject
: public QThread
{
Q_OBJECT
public:
ThreadObject();
~ThreadObject();
public slots:
void StopThread();
protected:
virtual void run() override;
signals:
// 自定义信号, 传递数据
void curNumber(int num);
private:
bool is_stop_;
int count_;
};
// ThreadObject.cpp
#include "ThreadObject.h"
#include <qDebug>
#include<windows.h>
ThreadObject::ThreadObject()
: is_stop_(false)
, count_(0) { }
ThreadObject::~ThreadObject(){}
void ThreadObject::StopThread()
{
is_stop_ = true;
}
void ThreadObject::run()
{
while (!is_stop_) {
// 自定义信号, 传递数据
emit curNumber(++count_);
//延迟
sleep(1);
}
qDebug() << " Exit";
}
调用方法如下:
在主线程中创建子线程对象,new 一个就可以了
//创建
ThreadObject* thread = new ThreadObject();
connect(thread, &ThreadObject::curNumber, this, [=](int num)
{
//unm是从线程那边传过来的数据
ui.lcdNumber->display(num);
});
//启动线程
thread->start();
关闭线程:
thread->StopThread();