0

私はQtでプロジェクトに取り組んでいます。プログラムの起動時にすべての GUI コンテンツを追加する親クラスがあります。ただし、ユーザー入力を取得した後、他のさまざまなクラスでいくつかの数学演算を実行して、誤ったユーザー入力 (特定の種類のエラーの各クラス) をチェックしています。これらのクラスのオブジェクトは、私が作成した他のスレッド ( obj -> movetothread( thread )) に移動されました。したがって、マルチスレッドによってすべてのエラーを同時にチェックできます。問題は、間違ったユーザー入力があるたびに、対応するエラーに関する情報を含むMessageBoxをスローしたいということです。エラーチェックは非GUIスレッドで行われるため現在、私のプログラムをクラッシュさせています。したがって、私の唯一のオプションは、そのエラーを含むの参照を保持することです。最終的にすべてのエラーチェックから戻ったときに、 GUI スレッドQStringで Messageboxe を次々とスローします。このプロセスは非常に面倒です。この問題を解決するための回避策があれば教えてください。

PS: 簡単に言うと、マルチスレッド アプリケーションで非 GUI スレッドに GUI コンテンツを追加する方法を教えてください。

4

2 に答える 2

4

非 GUI スレッドから GUI を操作する必要はありません。GUI を操作し、ユーザーの応答を待つ必要がある場合 (QSemaphore などで)、ワーカー スレッドからシグナルを送信することをお勧めします。Qt::QueuedConnection を使用して、GUI スレッドにある QObject に実装されたスロットにそのシグナルを接続します。これにより、GUI スレッドでスロットが実行されます。

とにかく、このテーマで必要なものは何でも見つけることができます。検索を開始するだけです。

于 2013-02-11T07:19:01.697 に答える
0

これを行う正しい方法は、前述のようにシグナルを発行して GUI スレッドでキャッチすることですが、QMetaObject::invokeMethod() を使用してこれを行うこともできます。

于 2013-02-11T12:37:21.937 に答える