0

タイトルにあるように、スレッドを介して継続的に GUI フォーム要素を更新しようとしていますが、フォームはまだビジー状態のようです。これは私には理解できません。これが私がそれに近づいている方法です。

connect(this,SIGNAL(SIGUpdateForm),this,SLOT(MyUpdateMehtod));

フォームを更新する必要があるときはいつでも、次のことを行うだけです。新しいスレッドでメソッドを起動します。次に、新しいスレッドが上記のシグナルをトリガーします。

boost::thread t(&SomeClass::SomeMethod(),this);

someMethod が開始されると、ここで私が行うことです

void SomeMethod()
{
      SIGUpdateForm(); //Launch the signal that will update the form
}

次に、SIGUpdateForm は MyUpdateMehtod() を呼び出しますが、シグナル以降 (キューに入れられたものでもダイレクトでもスレッドが起動されないため、フォームがハングしているように見えます)。しかし、シグナル自体が独立したスレッドから呼び出されているため、これは私を混乱させます。ぶら下げ?この作業を行うにはどうすればよいですか?

4

1 に答える 1

1

Qt には独自のスレッドがあります。実際には、スレッドは必要ありません。QTimer はあなたのためにそれを行います。ここに例があります。

void updateForm()
{
 ui->bla->setText("bla");
 // bla bla method
}

QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(updateForm()));
timer.start(3000);

updateForm()3 秒ごとに呼び出されるようになりました。GUI はハングしません。そうする別の方法は、イベントループを処理することです。

while(....)
{
 // some lengthy task
 qApp->processEvents(QEventLoop::AllEvents);
}
于 2013-08-15T21:34:01.747 に答える