1

私は自分のプログラムの 1 つの主要な問題に関してさまざまな質問をしましたが、まだまったく解決していません。スレッドを使用して UI がロックアップしないようにしていますが、明らかにできないため、基本的にはまだ解決していません。スレッド内の UI 要素。

そのため、カスタムのシグナルとスロットを使用するように言われました (例が示されているわけではありません)。

したがって、私が読んだドキュメントから、次のコードを思いつきました。

.h

signals:

void paint_signal(double x, double y);

.cpp

  connect(this,SIGNAL(paint_signal(double x, double y)), this, SLOT(PaintSomething(x,y)));

Paintsomething 関数は、これらすべてと同じクラス内にあります....

スレッド:

*future2 = QtConcurrent::run(this, &GUI::paintAll);

paint all は、paint_signal を発行し、2 つの double を渡します

emit paint_signal(x, y);

しかし、私はまったく理解できないこのエラーを受け取ります

 connect: No such signal GUI::paint_signal(double x, double y)
4

2 に答える 2

4
connect(this,
        SIGNAL(paint_signal(double, double)), 
        this, 
        SLOT(PaintSomething(x,y)));

パラメータ名を削除すると、機能するはずです。これが機能しない場合、これは次のようになります。

    connect(this,
        SIGNAL(paint_signal(double, double)), 
        this, 
        SLOT(PaintSomething(double,double)));

これがうまくいくかどうか教えてください:)

アップデート

スレッドで UI を使用することはできず、代わりにスレッドから UI にシグナルを送信するという考え方です。この答えはおそらく最初に戻るため(そしておそらく新しい質問)、スレッドからシグナルを送信する方法の実例を次に示します。

スレッド内の UI への QT シグナル

于 2013-04-25T09:24:47.810 に答える
1

Floris Velleman の答えは問題ありませんが、新しいシグナル スロット構文を使用することで、コンパイル時にエラーをキャッチし、冗長な括弧を取り除くことができます。

古い構文:

connect(this,
        SIGNAL(paint_signal(double, double)), 
        this, 
        SLOT(PaintSomething(double,double)));

新しい構文:

connect(this,
        &SenderClass::paint_signal, 
        this, 
        &ReceiverClass::PaintSomething);
于 2013-04-26T19:41:55.447 に答える