我已经使用QFuture
为我已经在代码中使用的函数启动了一个线程,这个函数需要很长时间才能冻结我的GUI。
线程似乎正常工作:
QFuture<int> result = QtConcurrent::run(&m_DC, &DatabaseController::getAll);
然而,当getAll
函数结束时,我认为这个线程仍在运行,它应该不是,但我不知道如何结束或完成它。我查看了文档,但它并没有真正说清楚。
基本上我在线程启动时显示进度条为忙,并希望在结束时隐藏它
if(result.isRunning())
{
ui->progressBar->setRange(0,0);
ui->progressBar->show();
}
if(result.isFinished())
{
ui->progressBar->hide();
}
答案 0 :(得分:0)
使用QFutureWatcher监视QtConcurrent :: Run返回的QFuture,将QFutureWatcher :: finished连接到一个插槽以包装progressBar的显示。像
这样的东西connect(&job_watcher_,
SIGNAL(finished()),
SLOT(endLengthyJob()));
MainWindow.cpp
void MainWindow::endLengthyJob()
{
ui->progress_bar->hide();
} // end_slot(MainWindow::endLengthyJob)
附注:QtConcurrent :: Run生成的线程无法终止。