QFutureWatcher信号无效

时间:2016-10-07 03:50:26

标签: c++ qt qtconcurrent

当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");
  }

2 个答案:

答案 0 :(得分:3)

你需要你的观察者活得更久..你在堆栈中声明你的观察者,所以它会在发出连接信号之前被摧毁。

尝试将QFutureWatcher观察者声明为MainWindow标头中的成员变量,然后将单个连接到MainWindow构造函数中的插槽

答案 1 :(得分:-1)

替换它:

connect(&watcher, SIGNAL(finished()), this, SLOT(MainWindow::finishedCopy()));

与此:

connect(&watcher, SIGNAL(finished()), this, SLOT(finishedCopy()));

此外,connect会返回bool,因此您可以随时检查连接是否成功。