Qt有两种多线程的方法,一种是实现QThread的run函数,另一种是定义一个继承于QObject的对象放入到一个Thread里,其实两种方法区别不大,用起来都比较方便。
Qt官方建议使用第二种方法,使用继承QObject的方法更加灵活,代码也更容易维护。本篇介绍第二种方法。
1、定义和实现任务类
- 定义了两个类,Thread1和Thread2,一定要继承QOBject,因为只有QOBject才可以使用moveToThread()方法.
- 每个类各自定义了三个方法,
方法名 | 含义 |
---|---|
begin | 任务 |
working | 返回任务中的进度 |
finish | 结束任务的返回值 |
myThread.h,全部代码
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
class Thread1 : public QObject
{
Q_OBJECT
public:
explicit Thread1(QObject *parent = nullptr);
void begin(int num);
signals:
void working(int num);
void finish(QString elapsedTime );
};
class Thread2 : public QObject
{
Q_OBJECT
public:
explicit Thread2(QObject *parent = nullptr);
void begin(int num);
signals:
void working(int num);
void finish(QString elapsedTime );
};
#endif // MYTHREAD_H
2、实现任务方法
- 只需要实现being方法,相当于thread中的run,方法名可以随便起。
- 因为working和finish是信号函数,所以不需要实现
myThread.cpp,全部代码
#include "myThread.h"
#include <QElapsed