【问题标题】:Updating a QProgressDialog with a QFuture使用 QFuture 更新 QProgressDialog
【发布时间】: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 事件。

【问题讨论】:

    标签: c++ qt qt4 qtconcurrent


    【解决方案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 前面是否缺少&
    猜你喜欢
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2020-03-05
    • 2020-06-01
    相关资源
    最近更新 更多