QDataStream behandelt eine Vielzahl von C++ - und Qt-Datentypen. Die vollständige Liste ist verfügbar unter http://doc.qt.io/qt-4.8/datastreamformat.html. Wir können auch Unterstützung für unsere eigenen benutzerdefinierten Typen hinzufügen, indem wir die Operatoren < < und >> überladen. Hier ist die Definition eines benutzerdefinierten Datentyp, der mit QDataStream verwendet werden können:
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);
Hier ist, wie wir die < < Betreiber implementieren würde:
QDataStream &operator<<(QDataStream &out, const Painting &painting)
{
out << painting.title() << painting.artist()
<< quint32(painting.year());
return out;
}
Zur Ausgabe ein Gemälde, wir einfach Ausgang zwei QStrings und ein Quint32. Am Ende der Funktion geben wir den Stream zurück. Dies ist ein gängiges C++ - Idiom, das es uns ermöglicht, eine Kette von < Operatoren mit einem Ausgabestrom zu verwenden. Zum Beispiel:
aus < < painting1 < < painting2 < < painting3;
Die Umsetzung des Operators >>() ist ähnlich der des Operator < <():
QDataStream &operator>>(QDataStream &in, Painting &painting)
{
QString title;
QString artist;
quint32 year;
in >> title >> artist >> year;
painting = Painting(title, artist, year);
return in;
}
Dies ist aus: C++ GUI-Programmierung mit Qt 4 von Jasmin Blanchette, Mark Summer
Es hat mich überrascht, dass die Liste der unterstützten Typen unvollständig ist: Sie bezieht sich wahrscheinlich nur auf die Typen, deren Serialisierung plattformübergreifend oder stabil ist. Zum Beispiel ist 'QSet' dort nicht aufgeführt. –
'QGeoCoordinate' ist ein anderes Beispiel. –