好吧,我们开始:
这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,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();
};
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 更新,但是当工作人员完成时......整个程序关闭。
我看过这个但没有为我工作(或者我不明白),也看过这个,但这说明我想做的是不安全的?
请帮忙,我做错了什么?