使用QFuture更新QProgressDialog

时间:2009-12-10 15:13:09

标签: c++ qt qt4 qtconcurrent

主GUI线程在等待QFuture时更新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事件。

1 个答案:

答案 0 :(得分:14)

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

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