qt序列化自定义对象_用Qt序列化

在使用Qt库编程GUI时,想要序列化一个包含自定义类型"MyType"的std::map。Qt的QDataStream类支持多种C++和Qt数据类型,并允许通过重载<<和>>操作符为自定义类型添加支持。文中提供了如何为名为Painting的自定义类型实现QDataStream操作的方法,包括设置和读取标题、艺术家和年份等字段。
摘要由CSDN通过智能技术生成

I am programming a GUI with Qt library. In my GUI I have a huge std::map.

"MyType" is a class that has different kinds of fields.

I want to serialize the std::map. How can I do that? Does Qt provides us with neccesary features?

解决方案

QDataStream handles a variety of C++ and Qt data types. The complete list is available at http://qt-project.org/doc/qt-4.8/datastreamformat.html. We can also add support for our own custom types by overloading the << and >> operators. Here's the definition of a custom data type that can be used with QDataStream:

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 &operator>>(QDataStream &in, Painting &painting);

Here's how we would implement the << operator:

QDataStream &operator<

{

out << painting.title() << painting.artist()

<< quint32(painting.year());

return out;

}

To output a Painting, we simply output two QStrings and a quint32. At the end of the function, we return the stream. This is a common C++ idiom that allows us to use a chain of << operators with an output stream. For example:

out << painting1 << painting2 << painting3;

The implementation of operator>>() is similar to that of operator<

QDataStream &operator>>(QDataStream &in, Painting &painting)

{

QString title;

QString artist;

quint32 year;

in >> title >> artist >> year;

painting = Painting(title, artist, year);

return in;

}

This is from: C++ GUI Programming with Qt 4 By Jasmin Blanchette, Mark Summerfield

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值