Вы не учли два важных факта - что char - знаковый тип и что не на всех машинах четырехбайтное число хранится в памяти в соответствии с порядком разрядов. (Остроконечные и тупоконечные архитектуры).
Если числа нужно передавать по сети, их следует конвертировать в сетевой порядок байт. Это делает семейство методов hton...(). Обратное преобразование делают методы ntoh...().
В QByteArray можно затолкать вот так:
int i=42;
QByteArray s=QByteArray::fromRawData(reinterpret_cast<const char*>(i),sizeof(i));