我在磁盘上序列化我的对象时遇到了问题。这是一个简化的场景:
我有ObjectA提供自己的序列化操作符。它们可以工作,因为我可以将数据保存/加载到文件中。接下来,我将包含ObjectB的ObjectA作为数据成员。为了保存ObjectB,我得到了一个运行时错误:
QVariant::保存:无法保存类型279。
我正在为流操作程序使用以下代码:
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;
}(对于ObjectB运算符,只需将A替换为B)
我认为错误发生在ObjectB序列化实现中,但我不知道如何继续。
发布于 2016-04-26 15:22:12
您必须在您的类型qRegisterMetaTypeStreamOperators。例如:
class MyType {
...
};
Q_REGISTER_METATYPE(MyType);
int main(int argc, char ** argv) {
...
qRegisterMetaTypeStreamOperators<MyType>();
...
}在Qt 6中,它不再是必要的。
https://stackoverflow.com/questions/21600251
复制相似问题