当QtConcurrent :: run函数copyFolder完成时,我的函数finishedCopy()没有被调用。 copyFolder函数完成没有错误。
QFutureWatcher<void> watcher;
connect(&watcher, SIGNAL(finished()), this, SLOT(MainWindow::finishedCopy()));
QFuture <void> future = QtConcurrent::run(this,&MainWindow::copyFolder,filepath,dir);
watcher.setFuture(future);
void MainWindow::finishedCopy()
{
QMessageBox::information(this,"","Done");
}
答案 0 :(得分:3)
你需要你的观察者活得更久..你在堆栈中声明你的观察者,所以它会在发出连接信号之前被摧毁。
尝试将QFutureWatcher观察者声明为MainWindow标头中的成员变量,然后将单个连接到MainWindow构造函数中的插槽
答案 1 :(得分:-1)
替换它:
connect(&watcher, SIGNAL(finished()), this, SLOT(MainWindow::finishedCopy()));
与此:
connect(&watcher, SIGNAL(finished()), this, SLOT(finishedCopy()));
此外,connect
会返回bool
,因此您可以随时检查连接是否成功。