【问题标题】:Qt serialization - how to exclude a field?Qt 序列化 - 如何排除一个字段?
【发布时间】:2012-07-24 16:33:53
【问题描述】:

我有一个包含大量动态(QVectors)和静态字段的结构,我需要对其进行序列化。我愿意用这个:http://www.developer.nokia.com/Community/Wiki/Qt_Object_Serialization

但是我需要这个结构中的一个字段,但我不希望它被序列化,有什么建议可以避免它吗?

【问题讨论】:

    标签: c++ qt serialization qt4


    【解决方案1】:

    要实现序列化,您将为 QDataStream + 您的数据结构定义 <<>> 运算符。所以不要写你不想序列化的字段!

    编辑:要使自定义类序列化,您必须做什么:

    class MyClass
    {
        int member1;
        int member2; // <- Don't serialize me!
        int member3;
    
    public:
        //Constructors and methods and bears (oh my!)...
    
        friend operator << (QDataStream& stream, const MyClass& myclass)
        {
            //Don't write member2:
            return stream << myclass.member1 << myclass.member3;
        }
    
        friend operator >> (QDataStream& stream, MyClass& myclass)
        {
            //Don't read it, either:
            return stream >> myclass.member1 >> myclass.member3;
        }
    };
    

    【讨论】:

    • 我不明白..我打算做一些类似的事情
    • @JohnnyPauling - 由于您的基础结构是一些 Qt 不知道的 C++ 类,如果您想将它与 QDataStream 一起使用,您必须为其定义流式操作符。这通常就像将其所有成员扔到流中一样简单 - Qt 确实 知道如何序列化基本类型及其自己的容器。由于您必须将每个单独的成员写入流,因此您可以省略任何您不想序列化的成员。
    • 呃,如果我写出 只有一个元素...我的结构?
    • @JohnnyPauling - 这不会编译。只有为 Qt 容器所持有的对象定义了流式操作符,您才能流式传输 Qt 容器。
    • 如果我的结构是由所有这些类型组成的:doc.qt.nokia.com/4.7/datastreamformat.html,那么序列化它还会有问题吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2013-08-11
    • 2016-12-29
    • 1970-01-01
    • 2013-01-12
    • 2017-04-16
    • 2019-04-20
    相关资源
    最近更新 更多