Multithreading Qt4将QThread信号与主线程插槽连接

Multithreading Qt4将QThread信号与主线程插槽连接,multithreading,qt4,signals,slots,Multithreading,Qt4,Signals,Slots,好了,我们开始吧: 这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,Worker和p4,p4向Worker发送等待时间和其他参数,我希望在不同的线程中处理,但随后用结果更新主线程 所以,Worker.h看起来像这样: #include <QObject> class Worker : public QObject { Q_OBJECT public: int time; int actual_weight; int supporte

好了,我们开始吧:

这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,Worker和p4,p4向Worker发送等待时间和其他参数,我希望在不同的线程中处理,但随后用结果更新主线程

所以,Worker.h看起来像这样:

 #include <QObject>

class Worker : public QObject
{
    Q_OBJECT
public:
    int time;
    int actual_weight;
    int supported_weigth;

    Worker();
    ~Worker();

public slots:
    void process();

signals:
    void finished();
};
#include "worker.h"

#include <QDebug>
#include <iostream>

using namespace std;

Worker::Worker()
{
}

Worker::~Worker(){

}

void Worker::process(){

    cout << "sleep!" << endl;
    sleep(this->time);
     cout << "done!" << endl;
    //more_nonsense_stuff();
    emit finished();

}
问题是SLOT update_gui()是在主窗口头中定义的,并在.cpp中实现,但它永远无法执行

我已经尝试连接Qt::DirectConnection,gui也会更新,但是当worker完成时。。。整个节目结束了

我看了,但没有为我工作(或我不明白),也看了,但这表明我试图做的是不安全的


请帮帮我,我做错了什么?

你的代码适合我。您尚未发布的代码中可能有错误。特别是,从主窗口类中看到更多的代码会很有帮助太晚,实际连接的类型为“直接”?:)
QThread* t = new QThread;
Worker* w = new Worker();
w->time = this->transactions[i].time;
connect(t, SIGNAL(started()), w, SLOT(process()));
connect(w, SIGNAL(finished()), this, SLOT(update_gui()));
w->moveToThread(t);
t->start();