如果我使用QtConcurrent::run
启动某个函数进行异步执行,并且使用QFutureWatcher
监视返回的未来,那么如果我可以做任何异步执行函数来传达一些进度文本,该怎么办呢?会导致QFutureWatcher
发出progressTextChanged
信号吗?
即我想要做的是 之类的事情:
void fn() {
???->setProgressText("Starting);
...
???->setProgressText("halfway");
...
???->setProgressText("done!");
}
QFutureWatcher watcher;
connect(&watcher, SIGNAL(progressTextChanged(const QString&)), &someGuiThing, SLOT(updateProgress(const QString&)));
connect(&watcher, SIGNAL(finished(), &someGuiThing, SLOT(doStuff()));
QFuture<void> future=QConcurrent::run(fn);
watcher.setFuture(future);
然而,大问题,QtConcurrent :: run documentation明确说明
请注意,QtConcurrent :: run()返回的QFuture 不支持 取消,暂停或进度报告。 QFuture返回了可以 仅用于查询运行/完成状态和返回 功能的价值。
那么我能做的最简单的事情是什么能让我获得与上述功能相同的功能?我是否必须放弃QtConcurrent::run
? QFuture
?都? (然后回到QThread
并排队连接?)
答案 0 :(得分:2)
由QtConcurrent::mappedReduced()
等QtConcurrent函数返回的QFuture具有progressValue(),progressMinimum(),progressMaximum()和progressText()函数提供的进度信息。与QtConcurrent::run()
不同,它不会自动提供这样的东西。
QtConcurrent::run()
不会像QtConcurrent::mappedReduced()
那样自动提供进度信息。但是您可以使用信号拥有自己的进度报告机制。我不认为还有其他方法可以直截了当。