2016-10-07 4 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

この置き換え:接続がsuccededされている場合ので、あなたは常にチェックすることができ、またconnect戻りbool

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

:それと

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

を。

+0

@ H.Gあなたは正確に何が間違っているの詳細を与えることができますか? –

+0

@H.G、古いQt接続構文は完全修飾名が好きではないので、この場合も問題がある可能性があります。 –

+0

finishedCopy()を変更しても違いはありません。 – jocala