使用QFuture更新QProgressDialog

Ale*_*x77 7 c++ qt qt4 qtconcurrent

主GUI线程在等待QFuture时更新QProgressDialog的正确方法是什么.具体来说,这个循环中的内容:

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

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

  // what goes here?
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个sleep()就像在那里调用,但这不是最佳的(并且当然会引入一些GUI延迟).

如果我什么也没放,主线程将循环极点pd.setValue(),浪费CPU周期.

我希望放置像QCoreApplication :: processEvents(flags,maxtime)这样的东西,但如果事件队列为空则立即返回.我想要一个等待maxtime或者即使队列为空的版本.这样,我得到了延迟,主线程随时准备响应GUI事件.

Tim*_*imW 14

使用a QFutureWatcher使用信号和插槽监视QFuture对象.

QFutureWatcher watcher;
QProgressDialog pd(...);
connect(&watcher, SIGNAL(progressValueChanged(int)), &pd, SLOT(setValue(int)));
QFuture f = ...
watcher.setFuture(f);
Run Code Online (Sandbox Code Playgroud)