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 sobrecargando los operadores < < y >>. Esta es la definición de un tipo de datos personalizados que se pueden utilizar 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 nos gustaría poner en práctica el operador < <:
QDataStream &operator<<(QDataStream &out, const Painting &painting)
{
out << painting.title() << painting.artist()
<< quint32(painting.year());
return out;
}
A la salida de un cuadro, simplemente salida de 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 utilizar una cadena de operadores < < con una secuencia de salida. Por ejemplo:
cabo < < painting1 < < painting2 < < painting3;
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: Programación C++ GUI con Qt 4 de Jasmin Blanchette, Mark Summerfield
Se Me sorprendió que la lista de tipos soportados sea incompleta: probablemente solo haga referencia a los tipos de serialización de los cuales es multiplataforma o estable. Por ejemplo, 'QSet' no aparece en la lista. –
'QGeoCoordinate' es otro ejemplo. –