Правильно казалось, версию Qt он пишет для структур (напр QFont). А QString просто счетчик и по два байта на символ в юникоде.
Для QString, влияет byteOrder и, как оказалось, version тоже.
Пока искал ответ, в исходниках нашёл забавную строчку
C++ (Qt)
if ((out.byteOrder() == QDataStream::BigEndian) == (QSysInfo::ByteOrder == QSysInfo::BigEndian))