QNetworkAccessManager manager;
QEventLoop loop;
QObject::connect(&manager, QOverload<QNetworkReply*>::of(&QNetworkAccessManager::finished),
&loop, &QEventLoop::quit);
...
loop.exec();
А для таймаута можете вызвать QTimer::singleShot(3000, &loop, &QEventLoop::quit);
PS: следует вообще избегать блокировок, а обрабатывать все в слотах класса. Следует учитывать что один экземпляр QNetworkAccessManager ограничен четырьмя одновременными подключениями.