0

我曾经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();
}
4

1 回答 1

0

使用 QFutureWatcher 监控 QtConcurrent::Run 返回的 QFuture,将 QFutureWatcher::finished 连接到一个 slot 以包装你的 progressBar 的显示。就像是

connect(&job_watcher_,
        SIGNAL(finished()),
        SLOT(endLengthyJob()));

主窗口.cpp

void MainWindow::endLengthyJob()
{
    ui->progress_bar->hide();
} // end_slot(MainWindow::endLengthyJob)

附注:由 QtConcurrent::Run 生成的线程无法终止。

于 2013-04-23T09:11:23.280 回答