使用Qt序列化

我正在用Qt库编程一个GUI。 在我的GUI中,我有一个巨大的std :: map。

“MyType”是一个具有不同types字段的类。

我想序列化std :: map。 我怎样才能做到这一点? Qt是否为我们提供了必要的特性?

QDataStream处理各种C ++和Qt数据types。 完整列表可从http://doc.qt.io/qt-4.8/datastreamformat.html获取; 。 我们也可以通过重载<<和>>操作符来增加对自定义types的支持。 以下是可以与QDataStream一起使用的自定义数据types的定义:

class Painting { public: Painting() { myYear = 0; } Painting(const QString &title, const QString &artist, int year) { myTitle = title; myArtist = artist; myYear = year; } void setTitle(const QString &title) { myTitle = title; } QString title() const { return myTitle; } ... private: QString myTitle; QString myArtist; int myYear; }; QDataStream &operator<<(QDataStream &out, const Painting &painting); QDataStream &operator>>(QDataStream &in, Painting &painting); 

以下是我们如何实现<<运算符:

 QDataStream &operator<<(QDataStream &out, const Painting &painting) { out << painting.title() << painting.artist() << quint32(painting.year()); return out; } 

要输出绘画,我们只需输出两个QStrings和一个quint32。 在函数结束时,我们返回stream。 这是一个常见的C ++习惯用法,它允许我们在输出stream中使用一系列<<运算符。 例如:

出来<<绘画1 <<绘画2 <<绘画3;

运算符>>()的实现类似于运算符<<():

 QDataStream &operator>>(QDataStream &in, Painting &painting) { QString title; QString artist; quint32 year; in >> title >> artist >> year; painting = Painting(title, artist, year); return in; } 

这是来自:Qt 4的C ++ GUI编程作者:Jasmin Blanchette,Mark Summerfield