Qtを使用してプログラムを作成する場合、長い再帰プロセスを実行できます。
その場合、しばらくすると、ウィンドウのタイトルの横に「応答しない」というメッセージが表示されます。
このメッセージにより、ユーザーはプログラムが機能しないと考える可能性がありますが、これは正しくありません。
Qtでこのメッセージを回避するにはどうすればよいですか?
システムとユーザー入力への応答性を維持するために、長時間実行されるタスクを独自のスレッドに配置します。プログレスバーのようにユーザーにフィードバックを提供することもできます。そうすれば、ユーザーはプログラムがまだ要求した仕事をしていることを確認できます。
いくつかの例については、Qtでのスレッドの使用の概要、およびスレッド化と並行プログラミングの例については、スレッド化の基本も参照してください。
ループ(または再帰関数)が原因でプロセスに長い時間がかかる場合は、ループ内でQCoreApplication :: processEvents()を呼び出して、アプリケーションにイベントの処理を依頼できます。
時間がかかる命令が1つしかない場合(大きなファイルのコピーなど)は、QThreadまたはQtConcurrentを使用できます。
Olafの答えは良いですが、より簡単なアプローチは、コードにQCoreApplication :: processEvents()を振りかけることです。
ドキュメントから:
処理するイベントがなくなるまで、指定されたフラグに従って、呼び出し元のスレッドのすべての保留中のイベントを処理します。プログラムが長い操作(ファイルのコピーなど)の実行でビジー状態のときに、この関数をときどき呼び出すことができます。