2016-10-07 12 views
0

Моя функция, завершенная Копия(), не вызывается, когда функция QtConcurrent :: run copyFolder завершена. Функция copyFolder выполняет ошибки без ошибок.Сигнал QFutureWatcher не работает

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

Извините, вы можете расширить свой ответ, пожалуйста? – jocala

ответ

1

Вам нужен ваш наблюдатель, чтобы жить дольше .. вы объявляете своего наблюдателя в стеке, и поэтому он будет уничтожен до того, как будет выдан сигнал соединения.

Try объявить QFutureWatcher Бодрствующего как переменную в заголовке вашего MainWindow, а затем подключить единственный в слот в MainWindow конструктор

-1

Заменить это:

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

с этим:

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

Кроме того, connect возвращает bool, так что вы всегда можете проверить, если соединение преуспели.

+0

@ H.G можете ли вы дать более подробную информацию о том, что именно неправильно? –

+0

@ H.G, насколько я помню, старый синтаксис Qt connect не понравился полностью квалифицированным именам, так что это может быть проблемой и в этом случае –

+0

Изменение finalCopy() не изменило ситуацию. – jocala