QApplication::exec()を呼び出さずにQtを使用する安全な方法はありますか?
複数のリソースで長期間有効なプロセスを実行しているさまざまなオブジェクトが多数あります (少なくともそのうちの 1 つは Web アプリケーション サーバーと通信しています)。これらのさまざまなプロセスの適切なタイミングでユーザーに入力を求める GUI アプリケーションを作成しています。「フロー」ロジック (次に何をすべきかを決定するロジック) を、ダイアログ クラスのような GUI オブジェクトではなく、1 つの場所に配置したいと考えています。私は次のようなことができると考えていました:
...
wait_dialog dlg;
dlg.setModal( false );
dlg.show(); // Should return...
netobject.start_long_lived_process_that_happens_on_other_thread( &completion_callback );
while ( !completion_callback_called() )
{
qApp->processEvents();
netobject.pump_callbacks();
magically_avoid_busywait_while_still_servicing_qt_somehow();
}
dlg.hide();
...
Qtの観点から、これは安全ですか?実装する「良い」方法はありますmagically_avoid_busywait_while_still_servicing_qt_somehow()
か?
ここで達成しようとしているのは、処理フローを可能な限り明確な方法で記述することです。これを行う単一の関数が欲しい:
show_a_non_modal_wait_dialog()
start_some_processing_1()
wait_for_processing_1_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
show_a_non_modal_wait_dialog()
start_some_processing_2()
wait_for_processing_2_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
...
私が本当に避けたいのは、Qt ウィジェットとウィンドウ内で処理を開始して待機することです。また、処理オブジェクト自体は Qt から完全に独立しています。私がやろうとしているのは、いくつかのヘルパー コールバックとステータス変数を使用して、1 つの関数でコントローラーを作成することだと思います。