继承 QThread

最后更新于:2022-04-02 02:13:06

[TOC] ## 概述 1. 继承 QThread 类重写了 run() 函数 2. 执行完成后发出一个完成信号 3. connect 处理 QThread::finished() 信号触发 QThread::deleteLater() ``` connect(thread, &WorkerThread::finished, thread, &WorkerThread::deleteLater); ``` 4. 通过从run()函数直接或者间接地调用 QThread::exec(),可以让线程进入事件循环 ``` while (true) { //...code exec(); } ``` ## 示例 ``` class WorkerThread : public QThread { Q_OBJECT public: WorkerThread(QObject *parent = 0) : QThread(parent) { } protected: void run() { for (int i = 0; i < 1000000000; i++); emit done(); } signals: void done(); }; // main.cpp ... // 在GUI 中显示计时器 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, [=]() { static int sec = 0; lcdNumber->display(QString::number(sec++)); }); WorkerThread *thread = new WorkerThread(this); // 子线程处理完发出信号 connect(thread, &WorkerThread::done, timer, &QTimer::stop); // 子线程完成后,删除子线程 connect(thread, &WorkerThread::finished, thread, &WorkerThread::deleteLater); // 点击事件触发信号 connect(button, &QPushButton::clicked, [=]() { timer->start(1); thread->start(); }); ```
';