需求
QFutureWatcher
?
解决
QFutureWatcher
一般是搭配 QFuture
, QtConcurrent
来使用,用于检测多线程异步执行计算的进度,方便在主线程上进行展示或者执行其他动作。
配置 watcher
watcher_ = new QFutureWatcher<int>;
connect(watcher_, &QFutureWatcher<int>::finished,
this, &MainWindow::busy_job_finished);
调用子线程来执行
QtConcurrent::run
提供了最简单的子线程执行函数的方法。
auto future = QtConcurrent::run(this, &MainWindow::do_busy_job);
watcher_->setFuture(future);
int MainWindow::do_busy_job()
{
return 1;
}
执行结果
void MainWindow::busy_job_finished()
{
// 若有需要, 关闭通知对话框
qDebug() << "busy job finished!";
qDebug() << "the returned value is: "
<< watcher_->result();
}
参考
在 QT UI 编程中使用 QtConcurrent 和 QFutureWatcher 执行并发任务