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

时间:2012-11-05 02:16:01

标签: multithreading qt4 signals slots

我们就在这里:

这是整个互联网,但它似乎并不适合我,事情是我有两个线程,工人和p4,p4发送时间等待和其他参数工人,我希望要在不同的线程中处理,然后用结果更新主线程。

所以,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();
};

Worker.cpp看起来像这样:

#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();

}

然后在我的主线程中我有这个:

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();

问题是SLOT update_gui()在主窗口标题中定义并在.cpp中实现,但它永远不会执行。

我尝试过附加Qt :: DirectConnection和gui更新,但是当工作完成时...整个程序关闭。

我看了this但是没有为我工作(或者我不理解),还看了this但是那说我想做的是不安全的?

请帮助,我做错了什么?

0 个答案:

没有答案