兩篇博文可以看下:
https://www.cnblogs.com/vegetable/p/6648609.html
https://blog.csdn.net/wangjianbo09/article/details/83352930
Qt中線程的一種創建方式,就是使用QObject::moveToThread()函數。如下,直接上源代碼,可以把費時的任務放到doWork()方法裏進行,不阻塞主線程。
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
class Worker : public QObject
{
Q_OBJECT
public:
Worker();
~Worker();
public slots:
void doWork();
private:
};
#endif // WORKERR_H
1 #include "Worker.h"
2 #include <QDebug>
3
4 Worker::Worker()
5 {
6
7 }
8
9 Worker::~Worker()
10 {
11
12 }
13 void Worker::doWork()
14 {
15 for (int i = 0;i < 10000;i++)
16 {
17 qDebug() << i;
18 }
19 }
1 m_pWorker = new Worker;
2 m_pWorkerThread = new QThread(this);
3
4 connect(m_pWorkerThread, SIGNAL(started()),m_pWorker, SLOT(doWork()));
5 connect(m_pWorkerThread, SIGNAL(finished()), m_pWorker, SLOT(deleteLater()));
6 m_pWorker->moveToThread(m_pWorkerThread);
分析一下,關於moveToThread()的機制,就好比是將一個普通的類,QT object類通過 moveToThread,將原有的普通類,包上了一層QThread類,這樣就更方便了,將某個函數定義成QThread中花銷時間最大的一個函數,相當於放進了QThread中的run()函數中。