例えば別スレッドで画像を処理して、処理し終わるまでメインスレッドは待機したい、などですね。
こんな時はシグナルウォッチャークラスを作ってループで監視させれば良いのですが、Qtにはそのための良いクラスが用意されていました。それがQSignalSpyです。Qt5〜対応しています。早速使い方をみて行きましょう。
QSignalSpy
早速使い方を見てみましょう。
プロジェクトファイルに、
QT += testlib
と追加し、シグナル監視を始める部分で
QSignalSpy spy(myObj,SIGNAL(someSignal())); 〜do something〜 while(true){ //シグナルを1回でも受け取っていたらループを抜ける if(spy.count() > 0)break; //1000ms待つ(その前にシグナルを受け取ったら先に進みます) spy.wait(1000); }
とします。(シグナルが永遠にこないと無限ループになるので実装するときは待つ上限時間を決めるのが良いと思います)
もしくは、
QSignalSpy spy(myObj,SIGNAL(someSignal())); 〜do something〜 if(spy.count() == 0){ //上限5000msでシグナルを待つ spy.wait(5000); }
めちゃくちゃ簡単に実装できましたね。
私、長らくQt4で開発をしていたので最近になってその存在を知りました。Qtのバージョンを上げるのは腰が重かったのですが、こういう新機能があるのをみるとやはり新しい環境で開発すべきなのでしょうね。