окно сообщений закручивает цикл событий в Exec() и позволяет QHttp-х асинхронная обработка. Цикл событий должен иметь возможность запускать между запуском передачи и ожиданием каких-либо результатов.
В идеале вы должны начать передачу и обработать результаты в слоте, подключенном к сигналу requestFinished(...)
QHttp. После того, как передача началась, ваш код должен вернуться в цикл событий.
В качестве быстрого взлома вы можете вызывать QCoreApplication::processEvents(QEventLoop::AllEvents, time)
, где время - это максимальное количество миллисекунд, которое вы ожидаете от своего переноса http. Это будет считаться плохим стилем и имеет негативные последствия. Во-первых, код, который запускает передачу, может быть повторно введен - скажем, если вы начнете передачу в слот с нажатием кнопки, и пользователь снова щелкнет его до передачи.
Вы должны использовать асинхронный стиль программирования, основанный на событиях, где у вас есть цепочка функций запроса/ответа: функции запроса запускают вещи, которые могут занять время, а функции ответа обрабатывают результаты. Это может показаться утомительным, но это единственный способ создать отзывчивые приложения. Такой код обычно будет находиться в QObject, и если вся обработка выполняется путем обработки событий или соединениями с сигналом/слотом (но не прямым вызовом слотов!), Он может быть тривиально перемещен в другой поток для дальнейшего повышения производительности и уменьшить влияние пауз в графическом интерфейсе смешанной родословной.
Спасибо за подробный ответ – mmatviyiv