Take the 2-minute tour ×

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?

share|improve this question

1 Answer 1

up vote 59 down vote accepted

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
    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; }
    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:

    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<<():

    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

share|improve this answer

Your Answer


