У меня проблема с сериализацией на диске моих объектов. Это упрощенный сценарий:Как сериализовать пользовательские объекты
У меня есть ObjectA, предоставляющий свои собственные операторы сериализации. Они работают, так как я могу сохранять/загружать данные в файл. Далее у меня есть ObjectB, содержащий ObjectA как элемент данных. Пытаясь спасти ObjectB я получил сообщение об ошибке выполнения:
QVariant::save: unable to save type 279.
Я использую этот код для потока opertors:
QDataStream & operator<<(QDataStream & dataStream, const ObjectA & objectA)
{
for(int i=0; i< objectA.metaObject()->propertyCount(); ++i) {
if(objectA.metaObject()->property(i).isStored(&objectA)) {
dataStream << objectA.metaObject()->property(i).read(&objectA);
}
}
return dataStream;
}
QDataStream & operator>>(QDataStream & dataStream, ObjectA & objectA) {
QVariant var;
for(int i=0; i < objectA.metaObject()->propertyCount(); ++i) {
if(objectA.metaObject()->property(i).isStored(&objectA)) {
dataStream >> var;
objectA.metaObject()->property(i).write(&objectA, var);
}
}
return dataStream;
}
(просто заменить А с B для операторов ObjectB)
Я думаю, что ошибка в реализации сериализации ObjectB, но я не знаю, как действовать.
Вы пытались зарегистрировать операторы потока с [ 'qRegisterMetaTypeStreamOperators'] (http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#qRegisterMetaTypeStreamOperators)? – thuga
Спасибо thuga, qRegisterMetaTypeStreamOperators - недостающая часть. Боковой вопрос: анализируя сохраненный файл с шестнадцатеричным редактором, я заметил, что он содержит строку ObjectA: это нормально? – bullet
Уверен, что у вас будет ваш ответ, если вы сбросите свойства на вывод отладки :) –