1

Qtを使用してプログラムを作成する場合、長い再帰プロセスを実行できます。

その場合、しばらくすると、ウィンドウのタイトルの横に「応答しない」というメッセージが表示されます。

このメッセージにより、ユーザーはプログラムが機能しないと考える可能性がありますが、これは正しくありません。

Qtでこのメッセージを回避するにはどうすればよいですか?

4

3 に答える 3

7

システムとユーザー入力への応答性を維持するために、長時間実行されるタスクを独自のスレッドに配置します。プログレスバーのようにユーザーにフィードバックを提供することもできます。そうすれば、ユーザーはプログラムがまだ要求した仕事をしていることを確認できます。

いくつかの例については、Qtでのスレッドの使用の概要、およびスレッド化と並行プログラミングの例については、スレッド化の基本も参照してください。

于 2013-02-27T09:39:29.800 に答える
3

ループ(または再帰関数)が原因でプロセスに長い時間がかかる場合は、ループ内でQCoreApplication :: processEvents()を呼び出して、アプリケーションにイベントの処理を依頼できます。

時間がかかる命令が1つしかない場合(大きなファイルのコピーなど)は、QThreadまたはQtConcurrentを使用できます。

于 2013-02-27T09:46:27.350 に答える
2

Olafの答えは良いですが、より簡単なアプローチは、コードにQCoreApplication :: processEvents()を振りかけることです。

ドキュメントから:

処理するイベントがなくなるまで、指定されたフラグに従って、呼び出し元のスレッドのすべての保留中のイベントを処理します。プログラムが長い操作(ファイルのコピーなど)の実行でビジー状態のときに、この関数をときどき呼び出すことができます。

于 2013-02-27T09:47:21.707 に答える