Вместо:
std::ostringstream out;
person.SerializeToOstream(&out);
QByteArray byteArray(out.str().c_str());
вы также можете написать:
QByteArray byteArray(person.SerializeAsString().c_str());
РЕДАКТИРОВАТЬ: выше двух дает тот же результат, но я не уверен, что это правильно.Кажется, что этот работает лучше:
QByteArray byteArray(QString::fromStdString(person.SerializeAsString()));
EDIT2: ОК, теперь я знаю, как это работает: первые два способа неверны, если в сериализации есть \ 0 char - все, что после этого, затем теряется.Чтобы исправить это можно написать:
QByteArray byteArray(person.SerializeAsString().c_str(), person.ByteSize());