QT 创建子线程
QT 创建子线程有几种方法:
- 创建子类,继承自
QThread
类,重写QThread::run()
函数,调用子类的QThread::start()
即可在子线程中执行。 QThread::create()
创建线程指针对象,调用指针线程的QThread::start()
即可在子线程中执行。- 调用
QObject::moveToThread()
到QThread
类对象,通过信号和槽触发执行子类处理函数。
注意:
moveToThread
方法必须使用信号和槽的触发方式,否则依然在调用线程中执行。- 线程的销毁注意子类资源的释放。
代码示例
- .h
class Thread : public QThread {
Q_OBJECT
public:
explicit Thread(QObject *parent = nullptr);
virtual ~Thread();
protected:
virtual void run() override;
};
class Worker : public QObject{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr);
virtual ~Worker();
void doWorker();
virtual bool event(QEvent *event) override;
signals:
void start();
};
- .cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
// 防止输入法中间输出内容
QTimer*timer = new QTimer;
connect(timer, &QTimer::timeout, this, [this, timer](){
timer->stop();
qDebug() << "\n====\n";
this->ThreadTest();
});
timer->start(1000);
}
MainWindow::~MainWindow() {
delete ui; }
#define LOG_THREAD_FUNC qDebug