Qt中的QMap序列化

时间:2011-03-19 14:14:29

标签: qt qt4

我有两个课程:valueNodekeyNode。这两个类都有2个私有成员。现在我创建一个QMap< keyNode , valueNode >。为此,我重写了operator<()。我想序列化这个QMap,但我不知道如何。

2 个答案:

答案 0 :(得分: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.

这应该有用。

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

编辑:

是的,忘了一件事。

您需要制作以下功能:

QDataStream & operator << (QDataStream & out, const MyClass & object);
QDataStream & operator >> (QDataStream & in, MyClass & object);

在类的标题中引入它们,并在该类的cpp文件中实现。

// MyClass.h

MyClass
{
    ...
};

QDataStream & operator << ...
QDataStream & operator >> ...

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

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

答案 1 :(得分:0)

将其存储在QVariant中,然后您可以使用QDataStream来读/写它。