Предполагая, что msnLogFile не был ранее создан с использованием QDataStream (если это так, тогда полностью игнорируйте этот ответ), вы не хотите использовать оператор >>.
Причина в том, что когда QDataStream пишет строки, он добавляет длину строки к выходным байтам. Это позволяет другому QDataStream считывать его обратно с правильной длиной и получать тот же результат. Следовательно, почему int, qint8 и т. Д. Работают правильно; нет предопределенного размера, это просто необработанные данные.
Если содержимое msnLogFile строго текстовое, вам нужно передать флаг QIODevice :: Text , чтобы открыть и использовать QIODevice :: readLine () или QIODevice: : readAll () , однако, если это двоичные данные, вам придется использовать QDataStream :: readRawData () и считывать данные обратно в правильном порядке с правильными размерами.