QT中创建线程的几种方法(QThread的使用示例)

QT 创建子线程

QT 创建子线程有几种方法:

  1. 创建子类,继承自QThread类,重写QThread::run()函数,调用子类的QThread::start()即可在子线程中执行。
  2. QThread::create()创建线程指针对象,调用指针线程的QThread::start()即可在子线程中执行。
  3. 调用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值