有两种:
第一种:
1. 需要创建一个线程子类,继承 Qt 的线程类 QThread:
#include <QThread> class MyThread : public QThread { };
2. 重写父类的 run()函数,子线程的业务逻辑就在该方法中编写;
class MyThread : public QThread { public: explicit MyThread(XXX XXXXXX, QObject *parent = nullptr); ... protected: void run() override; ... }
3. 在主线程中创建子线程对象
MyThread * subThread = new MyThread (XXX );
4. 启动子线程
subThread->start();
start() 启动,run()函数运行;
默认的线程为项目的主线程,自己创建的为子线程;
子线程和主线程之间通过信号 和 槽 实现传输:
// 如: signals: void ok (int cnt); void error (const QString &error);
//-------------------------------------
emit error("等待中....!");
//---------------------------------------
QObject::connect(MyThread, &MyThread::ok, this, [=](){
......
});
第二种
1. 需要创建一个类,派生自 类 QObject:
#include <QObject> class MyObject: public QObject { }
2. 在 MyObject 类中添加公共的成员函数,可以是多个,这些成员函数就是需要的业务逻辑函数;
#include <QObject> class MyObject: public QObject { Q_OBJECT public: explicit MyObject(QObject *parent = nullptr); // void subAAAA(xxxx xxxxx); // void subBBBB(xxxx xxxxx); }
subAAAA, subBBBB 就是创建的公共函数
3. 在主线程里面创建Qt 提供的标准 QThread 类对象;
// 创建线程对象 QThread* t = new QThread;
4. 在主线程里面创建 添加的 MyObject 类 对象
// 创建任务对象 MyObject* worker = new MyObject;
5. 将 worker 对应移动到子线程中,使用 moveToThread 函数
worker->moveToThread(t); // 将worker 移动到 QThread* t 中执行
6. 将子线程和主线程之间通过信号 和 槽 实现传输:
7. 起送子线程,也就是自定义的 QThread* t;
t->start();
标签:MyObject,Qt,方式,QObject,MyThread,线程,public,QThread From: https://www.cnblogs.com/susiesnai-sun/p/17927881.html