2016-10-07 87 views
0

當QtConcurrent :: run函數copyFolder完成時,我的函數finishedCopy()未被調用。 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

你需要你的觀察者壽命更長..你正在宣佈你的觀察者在堆棧中,所以它會在連接信號發出之前被破壞。

試圖聲明QFutureWatcher守望在你的主窗口標題的成員變量,然後連接到單一的主窗口構造插槽

-1

替換此:

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

與:

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

此外,connect回報bool讓您可以隨時檢查是否連接succeded。

+0

@ H.G你能給出更多細節什麼是不正確的? –

+0

@ H.G,據我記得老Qt連接語法並不像完全限定名稱,所以這可能是在這種情況下的問題 –

+0

更改finishedCopy()並沒有什麼區別。 – jocala