如何序列化自定义对象

时间:2014-02-06 10:29:30

标签: qt serialization qdatastream

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

我让ObjectA提供自己的序列化运算符。他们工作,因为我可以保存/加载数据到文件。 接下来,我将包含ObjectA的ObjectB作为数据成员。试图保存ObjectB我遇到了运行时错误:

  

QVariant :: save:无法保存类型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;
}

(只需将A替换为B,用于ObjectB运算符)

我认为错误是在ObjectB序列化实现中,但我不知道如何继续。

1 个答案:

答案 0 :(得分:0)

您的类型必须class MyType { ... }; Q_REGISTER_METATYPE(MyType); int main(int argc, char ** argv) { ... qRegisterMetaTypeStreamOperators<MyType>(); ... } 。 E.g:

clk_process :process
  begin
     clk <= '0';
     wait for clk_period/2;  
     clk <= '1';
     wait for clk_period/2;  
end process;