Sérialisation avec Qt
Je programmation une interface graphique avec la bibliothèque Qt. Dans mon interface graphique, j'ai une énorme carte std::.
"MyType" est une classe qui a différents types de champs.
Je veux sérialiser la carte std::. Comment puis-je le faire? Est-ce que Qt nous fournit des fonctionnalités nécessaires?
1 réponses
QDataStream gère une variété de types de données C++ et Qt. La liste complète est disponible à l'adresse http://doc.qt.io/qt-4.8/datastreamformat.html . Nous pouvons également ajouter le support de nos propres types personnalisés en surchargeant les opérateurs >. Voici la définition d'un type de données personnalisé qui peut être utilisé avec 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);
Voici comment nous implémenterions l'opérateur
QDataStream &operator<<(QDataStream &out, const Painting &painting)
{
out << painting.title() << painting.artist()
<< quint32(painting.year());
return out;
}
Pour produire une peinture, nous produisons simplement deux QStrings et un quint32. À la fin de la fonction, nous retournons le flux. C'est un idiome c++ commun qui nous permet d'utiliser une chaîne d'opérateurs
Out
L'implémentation de operator>> () est similaire à celle de operator
QDataStream &operator>>(QDataStream &in, Painting &painting)
{
QString title;
QString artist;
quint32 year;
in >> title >> artist >> year;
painting = Painting(title, artist, year);
return in;
}
C'est de: C++ GUI programmation avec Qt 4 par Jasmin Blanchette, Mark Summerfield