4

シェルプロセスを実行する関数を開始するために実装QtConcurrent::run()する次のコードがあります。完了したら、関数を呼び出したいのですが、呼び出されません。QFutureWatcherfetch()writeDesc

void MyClass::on_fetchButton_clicked()
{
    QFuture<void> fetcher;
    QFutureWatcher<void> watcher;
    connect(&watcher, SIGNAL(finished()), this, SLOT(writeDesc()));
    fetcher = QtConcurrent::run(this, &MyClass::fetch);
    watcher.setFuture(fetcher);
}

void MyClass::fetch()
{
    [...]
    qDebug()<<"Thread done";
}

void MyClass::writeDesc()
{
    qDebug()<<"Slot called";
    [...]
}

fetch()正常に動作しますが、プログラムはデバッグ メッセージのみを表示Thread doneし、Slot called. なぜwriteDesc呼び出されないのですか?

4

1 に答える 1

6

問題は、メソッドを終了するときにウォッチャー オブジェクトが破棄されることMyClass::on_fetchButton_clicked()です。破壊されたオブジェクトは何かを放出できません。クラスのコンストラクターでウォッチャーを割り当てて接続してみてください。デストラクタで破棄することを忘れないでください。

于 2014-03-22T14:11:47.113 に答える