Вы можете просто использовать QtConcurrent для запуска работоспособного и использовать QFuture для ожидания завершения.
#include <QtConcurrentRun>
class MyRunnable : public Runnable{
void run();
}
чтобы запустить и дождаться его, вы можете сделать следующее
//create a new MyRunnable to use
MyRunnable instance;
//run the instance asynchronously
QFuture<void> future = QtConcurrent::run(&instance, &MyRunnable::run);
//wait for the instance completion
future.waitForFinished();
Qtconcurrent :: run запустит новый поток для выполнения метода run () в экземпляре и немедленно вернет QFuture, который отслеживает прогресс экземпляра.
Обратите внимание, что, используя это решение, вы обязаны сохранять экземпляр в памяти во время выполнения.