Можно ли использовать QFutureWatcher для мониторинга нескольких последовательных задач, которые все запускаются с QConcurrent?

У меня есть ряд задач, которые должны произойти с набором изображений. Есть 3 шага, которые я хочу выполнить один за другим, но средний нужно запускать последовательно, потому что он опирается на результаты всех предыдущих итераций. Я хочу передать ход выполнения этих трех задач обратно в пользовательский интерфейс, используя QFutureWatcher, У меня уже есть другие задачи, которые делают это и подключаются к индикаторам выполнения и т. Д., Так что, если можно, используйте тот же процесс. Я думаю о реализации, чтобы иметь внутренний QFuture а также QFutureWatcher который выполняет каждую задачу, и один внешний QFutureWatcher который отслеживает это и передает информацию в пользовательский интерфейс. Может быть, что-то вроде этого (псевдокод):

runProcessingTask() {
connect(externalFutureWatcher, UI elements)
internalFuture = start first task
internalFutureWatcher.setFuture(internalFuture)
connect(internalFuture.finished(), taskfinished())
connect(internalFuture.progressValue(), updateProgress())
taskNumber = 1
}

taskFinished() {
switch(taskNumber):
case 1:
internalFuture = start second task
internalFutureWatcher.setFuture(internalFuture)
taskNumber = 2
case 2:
internalFuture = start third task
internalFutureWatcher.setFuture(internalFuture)
taskNumber = 3
case 3:
externalFutureWatcher.setFinished()
}

updateProgress() {
switch(taskNumber):
case 1:
extrenalFutureWatcher.setProgress(internalFutureWatcher.progress() / 3)
case 2:
extrenalFutureWatcher.setProgress(33.3% + (internalFutureWatcher.progress() / 3))
case 3:
extrenalFutureWatcher.setProgress(66.6% + (internalFutureWatcher.progress() / 3))
}

Будет ли это возможно? Нужно ли просто переопределить некоторые методы в QFutureWatcher и использовать их как мой externalFutureWatcher? Или это невозможно / есть намного лучший способ сделать это?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]