よし、どうぞ:
これはインターネット全体にありますが、私にとってはうまくいかないようです。問題は、ワーカーとp4の2つのスレッドがあり、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 の更新が行われましたが、ワーカーが終了すると... プログラム全体が閉じます。
私はこれを見ましたが、うまくいきませんでした(または理解できませんでした)、これも見ましたが、私がやろうとしていることは安全ではないと言っています??
助けてください、私は何が間違っていますか?