Serialización con Qt

Estoy progtwigndo una GUI con la biblioteca Qt. En mi GUI tengo un gran estándar :: mapa.

“MyType” es una clase que tiene diferentes tipos de campos.

Quiero serializar el std :: map. ¿Cómo puedo hacer eso? ¿Qt nos proporciona las características necesarias?

QDataStream maneja una variedad de tipos de datos C ++ y Qt. La lista completa está disponible en http://doc.qt.io/qt-4.8/datastreamformat.html . También podemos agregar soporte para nuestros propios tipos personalizados al sobrecargar los operadores < < y >>. Aquí está la definición de un tipo de datos personalizado que se puede usar con 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); 

Así es como implementaríamos el < < operador:

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

Para producir una pintura, simplemente enviamos dos QStrings y un quint32. Al final de la función, devolvemos la secuencia. Esta es una expresión común de C ++ que nos permite usar una cadena de < < operadores con un flujo de salida. Por ejemplo:

fuera < < pintura1 << pintura2 << pintura3;

La implementación del operador >> () es similar a la del operador < < ():

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

Esto es de: Progtwigción de la GUI de C ++ con Qt 4 Por Jasmin Blanchette, Mark Summerfield