Qt中的QMap序列化

woo*_*ody 2 qt qt4

我有2个班级:valueNodekeyNode.这两个类都有2个私有成员.现在我创建一个QMap< keyNode , valueNode >.为此,我覆盖operator<().我想序列化这个QMap,但我不知道如何.

0xb*_*00d 7

QMap<QString, QString> map;
map.insert("Hello", " World!");

QByteArray data;
QDataStream * stream = new QDataStream(&data, QIODevice::WriteOnly);

(*stream) << map;
delete stream;

// Now QByteArray should have the map as serialized data.
Run Code Online (Sandbox Code Playgroud)

这应该工作.

您可能想知道新的删除疯狂,但有一个原因:除了解构流之外,没有办法将数据从流刷新到bytearray.或者也许有,如果我错了,请给我评论.

编辑:

哦是的,忘了一件事.

你需要做这些功能:

QDataStream & operator << (QDataStream & out, const MyClass & object);
QDataStream & operator >> (QDataStream & in, MyClass & object);
Run Code Online (Sandbox Code Playgroud)

将它们引入类的头文件中,并在该类的cpp文件中实现.

// MyClass.h

MyClass
{
    ...
};

QDataStream & operator << ...
QDataStream & operator >> ...
Run Code Online (Sandbox Code Playgroud)

请注意,它必须是全局函数,而不是成员函数.

请注意,您必须为每个类创建一对.