(Речь идёт о Qt4 и C++03.)
Такая ситуация. По нажатию кнопки необходимо выполнить запрос через сеть. Если всё окей, то надо взять полученные от сервера данные и выполнить действие A. Если запрос облажался, то надо показать пользователю сообщение об ошибке и выполнить действие Б. Запросы к сети выполняются сторонним объектом Г, у которого исключительно синхронный блокирующий интерфейс.
Очевидно, что дёргать Г на главном потоке нельзя, так как это заблокирует event loop. Поэтому Г-запросы выполняются в побочном потоке через QRunnable-обёрточку, которая сохраняет результаты и сигналит о их завершении (или факапе).
Есть как минимум два подхода к подобной обработке: асинхронный через коллбек-слоты, которые связываются с сигналами обёрточки и просто вызываются, когда приходит время; и синхронный через QEventLoop, когда сигналы обёрточки связываются с QEventLoop::quit() и пока там Г думает, обработчик нажатия на кнопку крутит локальный event loop.
Какой способ предпочитает использовать лоровец? Есть ли какие-либо технические преимущества у какого-либо из них?