用Qt序列化 [英] Serialization with Qt

查看:773
本文介绍了用Qt序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Qt库编程GUI。在我的GUI我有一个巨大的std ::地图。



MyType是一个类有不同种类的字段。



我想序列化std :: map。我该怎么办? QDataStream是否处理各种C ++和Qt数据类型?QDataStream是什么?Qt是什么?完整列表位于 http://qt-project.org/doc/qt-4.8/datastreamformat。 html 。我们还可以通过重载<<<和>>运算符。以下是可用于QDataStream的自定义数据类型的定义:

 类绘画
{
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。在函数的结尾,我们返回流。这是一个常见的C ++成语,它允许我们使用<<运算符与输出流。例如:



out<< painting1<< painting2<



操作符>>()的实现类似于< pre> QDataStream& operator>>(QDataStream& in,Painting& painting)
{
QString title;
QString artist;
quint32 year;
在>> title>>艺术家>>年;
painting =绘画(标题,艺术家,年);
return in;
}



这是从C ++ GUI编程与Qt 4由Jasmin Blanchette,Mark Summerfield


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

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

QDataStream &operator<<(QDataStream &out, const Painting &painting)
{
    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

这篇关于用Qt序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆