Как общаться progressText с QtConcurrent::функцию "выполнить" (или аналогичного) в QFutureWatcher?



Если я запускаю некоторую функцию для асинхронного выполнения с помощью 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 документация ясно заявляет




Обратите внимание, что QFuture, возвращаемый QtConcurrent:: run (), не поддерживает
отмена, приостановка или отчет о ходе выполнения . В QFuture может
используется только для запроса состояния запущено / завершено и возврата
значение функции.




Так что же самое простое, что я могу сделать, чтобы получить что-то функционально эквивалентное тому, что пытается сделать вышеописанное? Должен ли я отказаться от QtConcurrent::run? QFuture? И то, и другое? (И вернитесь к QThread и встаньте в очередь связи?)
695   1  

1 ответ:

QFuture, возвращаемые функциями QtConcurrent, такими как QtConcurrent::mappedReduced(), имеют информацию о ходе выполнения, предоставляемую функциями progressValue (), progressMinimum (), progressMaximum () и progressstext (). В отличие от QtConcurrent::run() , который не обеспечивает такую вещь автоматически.

QtConcurrent::run() не предоставляет информацию о ходе выполнения автоматически, как QtConcurrent::mappedReduced(). Но вы можете иметь свой собственный механизм отчетности о прогрессе, используя сигналы. Я не думаю, что есть какой-то другой прямой путь.

Comments

    Ничего не найдено.