我们就在这里:
这是整个互联网,但它似乎并不适合我,事情是我有两个线程,工人和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但是那说我想做的是不安全的?
请帮助,我做错了什么?