Serializzazione con Qt

Sto programmando una GUI con la libreria Qt. Nella mia GUI ho un’enorme std :: map.

“MyType” è una class con diversi tipi di campi.

Voglio serializzare la std :: map. Come lo posso fare? Qt ci fornisce funzionalità necessarie?

QDataStream gestisce una varietà di tipi di dati C ++ e Qt. L’elenco completo è disponibile su http://doc.qt.io/qt-4.8/datastreamformat.html . Possiamo anche aggiungere il supporto per i nostri tipi personalizzati sovraccaricando gli operatori < < e >>. Ecco la definizione di un tipo di dati personalizzato che può essere utilizzato 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); 

Ecco come implementeremo l’operatore < <:

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

Per produrre un dipinto, vengono semplicemente emessi due QStrings e un quint32. Alla fine della funzione, restituiamo il stream. Questo è un idioma C ++ comune che ci consente di utilizzare una catena di operatori < < con un flusso di output. Per esempio:

out < < painting1 << painting2 << painting3;

L'implementazione dell'operatore >> () è simile a quella dell'operatore < < ():

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

Questo è da: C ++ GUI Programming with Qt 4 di Jasmin Blanchette, Mark Summerfield