50 votes

La sérialisation avec Qt

Je suis de la programmation d'une interface graphique avec la bibliothèque Qt. Dans mon interface graphique j'ai une énorme std::map.

"MyType" est une classe qui dispose de différents types de champs.

Je veux sérialiser les std::map. Comment puis-je le faire? N'Qt nous offre nécessaire de fonctionnalités?

95voto

Narek Points 7815

QDataStream gère une variété de C++ et de Qt types de données. La liste complète est disponible à l' http://qt-project.org/doc/qt-4.8/datastreamformat.html. On peut aussi ajouter le support pour nos propres types personnalisés par la surcharge de << et >> 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 pourrions mettre en œuvre l'opérateur<<:

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

À la sortie d'une Peinture, nous avons simplement la sortie de deux QStrings et un quint32. À la fin de la fonction, de nous renvoyer le flux. C'est une commune C++ un langage qui nous permet d'utiliser une chaîne de << opérateurs avec un flux de sortie. Par exemple:

out << painting1 << painting2 << painting3;

La mise en œuvre de l'opérateur>>() est similaire à celle de l'opérateur<<():

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 à partir de: C++ Programmation GUI avec Qt 4 Par Jasmin Blanchette, Mark Summerfield

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X