QThread workerThread;public:Controller() {//不要给对象指定父对象Worker *worker =newWorker;// 将Worker对象移动到新创建的线程中worker->moveToThread(&workerThread);connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);connect(this, &Controller::operate, worker, &Worker::doWor...
这个是第一种方式,直接调用 QObject::moveToThread() 函数,将继承自 QObject 的对象移到线程里面。此时该对象的 槽函数运行在另一个线程里面。 也就是说,当有信号绑定到该对象的槽函数的时候,并发送信号,该槽函数就运行在另一个线程里,否则该函数仍然运行在对象所在的线程中. ...
1. 继承QThread类 2. QObject::moveToThread() 2.1 继承QThread方法 第一种方法很简单,也很好理解,写一个类继承QThread类,并重写run()函数,并在主线程中生成一个ChildThread的实例,并调用对象的start()函数 首先定义FileCopyThread类,继承QThread,添加两个signals //FileCopyThread.h #ifndef CHILDTHREAD_H ...
#include"controller.h"#include<worker.h>Controller::Controller(QObject*parent):QObject(parent){Worker*worker=newWorker;worker->moveToThread(&workerThread);//调用moveToThread将该任务交给workThreadconnect(this,SIGNAL(operate(constint)),worker,SLOT(doWork(int)));//operate信号发射后启动线程工作connect...
MyThread(QObject *parent = nullptr) : QThread(parent) {} ~MyThread() {} protected: void run() override { MyObject *obj = new MyObject(); //创建对象 obj->moveToThread(this); //将对象移动到当前线程 connect(this, &QThread::started, obj, &MyObject::doWork); //当线程开始时,执行...
从往期《QThread源码浅析》可知,在Qt4.4之前,run 是纯虚函数,必须子类化QThread来实现run函数。而从Qt4.4开始,QThread不再支持抽象类,run 默认调用 QThread::exec() ,不需要子类化QThread,只需要子类化一个QObject,通过QObject::moveToThread将QObject派生类移动到线程中即可。这是官方推荐的方法,而且使用灵活、简...
如果使用这一方法,QThread::quit()没有效果。因为这个线程根本就不需要事件循环。这种情况想退出,将bRun设置为false或者直接使用QT很不推荐的terminate().二、使用moveToThread(),因为在Qt4.3(包括)之前,run 是虚函数,必须子类化QThread来实现run函数。而从Qt4.4开始run() 默认调用 QThread::exec() ,线程在调用...
Qt 多线程使用moveToThread Qt有两种多线程的方法,其中一种是继承QThread的run函数, 另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里。 Qt4.8之前都是使用继承QThread的run这种方法,但是Qt4.8之后,Qt官方建议使用第二种方法。
/// Controller.cpp//#include"Controller.h"Controller::Controller(QObject*parent):QObject(parent){auto*worker=newWorker;// 调用 moveToThread 将该任务交给 workThreadworker->moveToThread(&workerThread);// operate 信号发射后启动线程工作connect(this,SIGNAL(operate(constint)),worker,SLOT(doWork(int...
moveToThread位于QObject中,官方对此函数的解释如下: void QObject::moveToThread(QThread *targetThread) 这个函数适合于QObject及其子类,并且QObject的父对象必须为空,否则移动到线程失败。移动成功后,将在目标线程中开启事件处理。 待移动到线程的Object