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?
The QDataStream class allows you to serialize the Qt data types listed in this section as of version 18. It is always best to cast integers to a Qt integer type, such as qint16 or quint32, when reading and writing.
Object Serialization with the Boost C++ Library Boost serialization works in two ways: one is called the intrusive method and another is the non-intrusive method. The intrusive method is the simplest one where we build mechanism of serialization in the object itself.
QDataStream handles a variety of C++ and Qt data types. The complete list is available at http://doc.qt.io/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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With