使用 QFuture 更新 QProgressDialog
Posted
技术标签:
【中文标题】使用 QFuture 更新 QProgressDialog【英文标题】:Updating a QProgressDialog with a QFuture 【发布时间】:2009-12-10 15:13:09 【问题描述】:主 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】:使用QFutureWatcher
使用信号和槽来监控 QFuture 对象。
QFutureWatcher watcher;
QProgressDialog pd(...);
connect(&watcher, SIGNAL(progressValueChanged(int)), &pd, SLOT(setValue(int)));
QFuture f = ...
watcher.setFuture(f);
【讨论】:
很好的答案 TimW。仅供参考,您在connect(watcher, ...);
中的watcher
前面是否缺少&
?以上是关于使用 QFuture 更新 QProgressDialog的主要内容,如果未能解决你的问题,请参考以下文章