を使用して非同期実行用の関数を起動しQtConcurrent::run
、 を使用して返された未来を監視してQFutureWatcher
いる場合、その非同期実行関数で進行状況のテキストを通信するために何かできるとしたら、その結果としてQFutureWatcher
シグナルprogressTextChanged
が発生しますか?
つまり、私がやりたいことは次のようなものです:
void fn() {
???->setProgressText("Starting);
...
???->setProgressText("halfway");
...
???->setProgressText("done!");
}
QFutureWatcher watcher;
connect(&watcher, SIGNAL(progressTextChanged(const QString&)), &someGuiThing, SLOT(updateProgress(const QString&)));
connect(&watcher, SIGNAL(finished(), &someGuiThing, SLOT(doStuff()));
QFuture<void> future=QConcurrent::run(fn);
watcher.setFuture(future);
ただし、大きな問題、 QtConcurrent::runドキュメントには明確に記載されています
QtConcurrent::run() によって返される QFuture は 、キャンセル、一時停止、または進行状況レポートをサポートしていないことに注意してください。返された QFuture は、実行中/終了ステータスと関数の戻り値を照会するためにのみ使用できます。
では、上記がやろうとしていることと機能的に同等のものを得るために私ができる最も簡単なことは何ですか? 放棄しなければなりQtConcurrent::run
ませんか?QFuture
? 両方?(そしてQThread
、キューに入れられた接続に戻りますか?)