多くの計算を行う QThread があり (数分間実行できます)、1 つの (そして 1 つだけの) ポイントで、たとえば yes/no ダイアログの形式でユーザー入力が必要です。もちろん、スレッドはメイン スレッドではないため、GUI 要素にアクセスすることも、スレッドからダイアログを開くこともできません (Qt の設計上の選択)。
明らかな解決策はたくさんありますが、「推奨される」解決策または「ベスト プラクティス」に興味があります。
私のアイデア:
- GUI から入力を読み取る必要があるポイントは 1 つだけなので、2 つのスレッドを使用できます。2 つ目のスレッドは、ダイアログが評価された後に開始されます。問題: コードに柔軟性がなくなります。後でさらにダイアログを導入する必要がある場合はどうすればよいですか? 可能性は低いですが、発生する可能性があります。
- 私はスレッドを 1 つしか持っておらず、信号とスロットを両方向で通信します (逆方向ではなく、「スレッドからメインへ」の形式の信号のみを使用した経験があります)。スレッドが実行され、ユーザーの決定が必要なポイントに到達すると、スレッドはメイン (別名 GUI スレッド) にシグナルを送信し、メインはそれをスロットでキャッチし、ダイアログを作成し、結果を評価し、スレッドにシグナルを送信します。今何?
run()
スレッドはスロットでシグナルをキャッチしますが、計算が行われているメソッドにどのような影響を与えるべきでしょうか? がrun()
終了すると、スレッドは終了します。だから私は自分のrun()
関数にこのようなものを持っています:while (!can_continue) { sleep(); }
そして私は設定しますcan_continue
メインから送信された信号をキャッチしたスロットで。ただし、これが最もシンプルで最もエレガントなソリューションであることに疑問があります。私が知っておくべき一般的な慣行はありますか?