在等待QFuture时,主GUI线程更新QProgressDialog的正确方式是什么?具体地说,就是这个循环中的内容:
QProgressDialog pd(...);
QFuture f = ...;
while (!f.isFinished()) {
pd.setValue(f.progressValue());
// what goes here?
}现在,我在那里调用了一个类似sleep()的函数,但这并不是最优的(当然也会引入一些GUI延迟)。
如果我什么都不放,主线程会循环-极点pd.setValue(),浪费CPU周期。
我希望放入类似QCoreApplication::processEvents(flag,maxtime)的东西,但如果事件队列为空,它会立即返回。我想要一个版本,即使队列是空的,也可以等到maxtime或其他任何地方。这样,我得到了延迟,并且主线程总是准备好响应GUI事件。
发布于 2009-12-10 23:15:05
使用QFutureWatcher通过信号和插槽监视QFuture对象。
QFutureWatcher watcher;
QProgressDialog pd(...);
connect(&watcher, SIGNAL(progressValueChanged(int)), &pd, SLOT(setValue(int)));
QFuture f = ...
watcher.setFuture(f);https://stackoverflow.com/questions/1881627
复制相似问题