tim*_*day 7 c++ qt progress qtconcurrent qt5
如果我使用 启动一些用于异步执行的函数QtConcurrent::run,并使用 a 监视返回的 future 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);
Run Code Online (Sandbox Code Playgroud)
然而,大问题是,QtConcurrent::run文档明确指出
请注意,QtConcurrent::run() 返回的 QFuture 不支持 取消、暂停或进度报告。返回的QFuture只能用于查询函数的运行/完成状态和返回值。
那么,我能做的最简单的事情是什么,它能让我得到与上面试图做的功能相同的东西呢?我必须放弃吗QtConcurrent::run?QFuture?两个都?(然后返回QThread并排队连接?)
QtConcurrent 函数返回的 QFutureQtConcurrent::mappedReduced()具有由 ProgressValue()、progressMinimum()、progressMaximum() 和 ProgressText() 函数提供的进度信息。与此不同的是QtConcurrent::run(),它不会自动提供这样的东西。
QtConcurrent::run()不会像 那样自动提供进度信息QtConcurrent::mappedReduced()。但是您可以使用信号拥有自己的进度报告机制。我认为没有其他简单的方法。
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |