私は2つのクラスを持っています:AとBはどちらもQObjectからサブクラスです。2つのスレッドでmovetoThreadを使用して2つのQObject間でシグナルとスロットを接続する方法
class A:public QObject
{
Q_OBJECT
public:
A();
~A();
}
私はちょうどthis articleを参照しました。次に、GUIで (メインスレッドを言う)Iは
pA = new A();
QThread *workerThread = new QThread;
pA->moveToThread(workerThread);
connect(workerThread , SIGNAL(started()), pA, SLOT(doWork()));
connect(pA, SIGNAL(finished()), workerThread , SLOT(quit()));
connect(pA, SIGNAL(finished()), pA, SLOT(deleteLater()));
connect(workerThread , SIGNAL(finished()), workerThread , SLOT(deleteLater()));
workerThread ->start();
pB = new B();
connect(pA,SIGNAL(sigProduce(double)),pB,SLOT(slotConsume(double)));//I just don't know where to put this line
QThread *workerThread = new QThread;
pB ->moveToThread(workerThread);
connect(workerThread , SIGNAL(started()), pB , SLOT(doWork()));
connect(pB , SIGNAL(finished()), workerThread , SLOT(quit()));
connect(pB , SIGNAL(finished()), pB , SLOT(deleteLater()));
connect(workerThread , SIGNAL(finished()), workerThread , SLOT(deleteLater()));
workerThread ->start();
sigProduce(二重)を用いて、異なるスレッドでAとBの間でデータを交換しようとするオブジェクトとslotConsume(二重)で定義された信号であります公共スロット:クラスBの ヘッダ:?
public slots:
void slotConsume(double);
ので、プログラムは、OBJのBは、誰も私を助けることができる(PA、PB)のコードの位置の問題を接続OBJ A.Doesから二重のデータを取得することはできません開始した後?感謝します。
いいえ、いつ接続するかは関係ありません。実行時に接続のタイプが解決されます。コードの一部は正常に見えますが、完全なコードサンプルではありません。 SSCCEに問題を提出してください。 –
あなたは 'QThread * workerThread = new QThread;'を2回持っています。同じ名前の変数を2回宣言することはできません。これはあなたの本当のコードですか? – thuga
コードを見直したところ、各AまたはBオブジェクトのdoWork()関数でqApp-> processEvents()が必要であることがわかりました。私はBのdoWork()ループでそれを呼び出すことを忘れてしまいます。もう1つの重要なことは、いつcennect関数を呼び出すかは関係ありません。そして、これはSazonovが言ったことです。 – liyang