Штатно обмен данными между родительским процессом и дочерним происходит через каналы std::cout, cin, cerr.
Все их прекрасно знаете с незапамятных времён, когда изучали ещё язык С и учились программировать под Windows.
Класс QProcess красиво инкапсулирует эти стандартные потоки ввода-вывода внутри себя.
Таким образом реализовать обмен между родительским и порожденные процессом становится просто и удобно.
Откуда-то сыпятся непонятные данные
Но вот пример из личного опыта: собираем свою программу, подключаем разные библиотеки ( в том числе например от Атола fptr10.dll) и наблюдаем ситуацию, что в std::cout иногда сыпятся совсем не слабые данные. То есть библиотека fptr10.dll , то ли по ошибке разработчика то ли так и было задумано засоряет нам лог выполнения приложения своими данными. А оно нам надо?
Вот и встаёт вопрос: как можно альтернативно обмениваться данными между процессами.
QLocalSetver
Следующий рабочий вариант это использование обмена через сокеты. Наш родительский процесс реализует QLocalServer, а дочерний процесс реализует QLocalSocket и недолго разбираясь все быстро заработало.
Причем нам надо только указать название сервера (порт не надо знать) и все работает как надо.
Таким образом мы остановились на варианте QLocalServer плюс оставляем пока ещё std::cerr обмен (на всякий случай).