7

QFutureを待機している間にメインGUIスレッドがQProgressDialogを更新するための適切な方法は何ですか。具体的には、このループの内容は次のとおりです。

QProgressDialog pd(...);
QFuture f = ...;

while (!f.isFinished()) {
  pd.setValue(f.progressValue());

  // what goes here?
}

現在、そこに呼び出しのようなsleep()がありますが、それは最適ではありません(もちろん、GUIのレイテンシーが発生します)。

何も入れないと、メインスレッドはpd.setValue()をループポールし、CPUサイクルを浪費します。

QCoreApplication :: processEvents(flags、maxtime)のようなものを配置したいと思っていましたが、イベントキューが空の場合はすぐに返されます。キューが空の場合でも、maxtimeなどまで待機するバージョンが欲しいのですが。そうすれば、遅延が発生し、メインスレッドは常にGUIイベントに応答する準備が整います。

4

1 に答える 1

14

を使用しQFutureWatcherて、信号とスロットを使用してQFutureオブジェクトをモニターします。

QFutureWatcher watcher;
QProgressDialog pd(...);
connect(&watcher, SIGNAL(progressValueChanged(int)), &pd, SLOT(setValue(int)));
QFuture f = ...
watcher.setFuture(f);
于 2009-12-10T15:15:05.213 に答える