首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何序列化自定义对象

如何序列化自定义对象
EN

Stack Overflow用户
提问于 2014-02-06 10:29:29
回答 1查看 2.1K关注 0票数 4

我在磁盘上序列化我的对象时遇到了问题。这是一个简化的场景:

我有ObjectA提供自己的序列化操作符。它们可以工作,因为我可以将数据保存/加载到文件中。接下来,我将包含ObjectB的ObjectA作为数据成员。为了保存ObjectB,我得到了一个运行时错误:

QVariant::保存:无法保存类型279。

我正在为流操作程序使用以下代码:

代码语言:javascript
复制
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序列化实现中,但我不知道如何继续。

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 15:22:12

您必须在您的类型qRegisterMetaTypeStreamOperators。例如:

代码语言:javascript
复制
class MyType {
  ...
};
Q_REGISTER_METATYPE(MyType);

int main(int argc, char ** argv) {
  ...
  qRegisterMetaTypeStreamOperators<MyType>();
  ...
}

在Qt 6中,它不再是必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21600251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档