C++ QFutureWatcher信号不工作

C++ QFutureWatcher信号不工作,c++,qt,qtconcurrent,C++,Qt,Qtconcurrent,QtConcurrent::run函数copyFolder完成时,没有调用我的函数finishedCopy()。copyFolder函数不会完成不带错误的操作 QFutureWatcher<void> watcher; connect(&watcher, SIGNAL(finished()), this, SLOT(MainWindow::finishedCopy())); QFuture <void> future = QtConcurrent::run(

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");
  }
QFutureWatcher-watcher;
连接(&watcher,信号(finished()),此,插槽(MainWindow::finishedCopy());
QFuture future=QtConcurrent::run(this,&MainWindow::copyFolder,filepath,dir);
watcher.setFuture(未来);
void主窗口::finishedCopy()
{
QMessageBox::信息(此,“,”完成”);
}
替换此:

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

connect(&watcher, SIGNAL(finished()), this, SLOT(finishedCopy()));
另外,
connect
返回
bool
,因此您可以随时检查连接是否成功。

替换此:

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

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

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

您需要您的观察者延长寿命。。您正在堆栈中声明您的监视程序,因此它将在发出连接信号之前被销毁


尝试在主窗口标题中将QFutureWatcher watcher声明为成员变量,然后将单个变量连接到主窗口构造函数中的插槽

您需要您的watcher更长寿。。您正在堆栈中声明您的监视程序,因此它将在发出连接信号之前被销毁


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

@H.G能否提供更多详细信息?到底什么是不正确的?@H.G,据我所知,旧的Qt connect语法不喜欢完全限定的名称,因此,这可能是本例中的问题所在。更改finishedCopy()也没什么不同。好吧,这很遗憾:)很高兴知道though@H.G你能提供更多的细节吗?到底什么是不正确的?@H.G,据我所知,旧的Qt connect语法不喜欢完全限定的名称,所以这可能是本例中的问题,也就是更改finishedCopy()没什么区别。好吧,这很悲哀:)很高兴知道,对不起,你能扩大你的答案吗?对不起,你能扩大你的答案吗?