Чудес не бывает, и PUSH - это только удобный для использования интерфейс. В его основе лежит как раз таки постоянное соединение клиента с сервером через
TCP Socket. Связь устанавливается на всё время, когда клиент в сети. При необходимости, сервер отправляет клиенту уведомление о появлении новых сообщений. Просто, в роли клиента и сервера выступает прослойка от Google, Apple и прочих, а ваше приложение становится подписчиком на их транспортные пакеты.
Вы можете использовать для создания подобной системы
WebSocket, который проще организовать, ели на серверной стороне какой-нибудь PHP, или классический сокет, если сервер позволяет запускать произвольные бинарные приложения и вы умеете их писать. Для приложений на Universal Windows Platform (платформа магазина приложений для Win10) доступна служба
WNS.
Судя по эпитету "тупой" к варианту "опрос каждые 10 секунд", с концепцией
REST вы уже знакомы. Тем не менее, вероятнее всего, это наилучший для вас вариант. Программирование классических сокетов - это, по современным меркам, низкоуровневое программирование, и вопрос требует хорошего понимания принципов работы ЛВС. Лезть туда нужно только в том случае, если у вас действительно высоконагруженный проект (нет, десять запросов от клиентов в секунду - это не High Load :D).
Я не могу дать совет по стеку технологий, не зная сути задачи ). Если вы уже пишете клиент на QT - С++ вам в помощь и для серверной стороны. Если веб-клиенты в будущем не планируются - можно спуститься до уровней обычного TCP-сокета. Уверен, в QT есть библиотеки для поддержки и этих вещей. Если сделать на WebSocket - в будущем можно будет без особых движений с серверной стороны сделать и встраиваемые в веб-страницы клиенты на HTML5/JavaScript.