1

ユーザー入力に基づいて重い計算を実行する QT で GUI を開発しています。start_computation() 関数は start_computation() function の実行でビジーであるため、GUI がハングするため、 start_computation ()という関数ですべての計算を実行します。そのため、QProgressBar を使用して、GUI がバックグラウンドで何らかのタスクを実行していることをユーザーに知らせたいと考えています。

そのような場合に QProgressBar を実装する最良の方法は何ですか?

4

3 に答える 3

8

複雑な計算全体が 1 つの関数で処理される場合、以下にリンクされているチュートリアルで説明されているように、次のようなことを行うことで、 QtConcurrentフレームワークに簡単に移植できます。

 QFuture<void> future = QtConcurrent::run(&this->MyObject, &MyClass::LongFunction);

オブジェクトは、将来のFutureWatcher完了情報に従って進行状況バーを更新します。

QFutures およびQtConcurrentでQProgressBarを使用する方法の完全な例がここにあります: https://wiki.qt.io/Progress_Bar

プログレスバーに部分的な完了情報を追加するのは簡単で、signals/slotメカニズムを使用して適切な情報を出力します。

于 2016-03-29T08:37:43.963 に答える
0

正確なシナリオについてはわかりませんが、計算が 1 つの関数 ( start_computation()) である場合は、スレッドを使用できQThread、良い解決策です。

実際、重い計算を新しいスレッドに入れる必要があります。その後、時々メイン (GUI) スレッドから計算の進行状況を確認し、進行状況バーを更新できます。

PS:QThread正しい方法で実装する例を確認するには、この SO の質問ここを参照してください。

于 2016-03-29T08:32:26.057 に答える