Serializacja za pomocą Qt

Programuję GUI z biblioteką Qt. W moim GUI mam ogromną mapę std::.

"MyType" jest klasą, która ma różne rodzaje pól.

Chcę serializować mapę std::. Jak mogę to zrobić? Czy Qt dostarcza nam niezbędne funkcje?

Author: Narek, 2010-04-03

1 answers

QDataStream obsługuje różne typy danych C++ i Qt. Pełna lista dostępna jest pod adresem http://doc.qt.io/qt-4.8/datastreamformat.html . możemy również dodać obsługę naszych własnych typów przez przeciążenie operatorów >. Oto definicja niestandardowego typu danych, który może być używany z 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);

Oto jak zaimplementowalibyśmy operator

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

Aby wydrukować obraz, po prostu wyprowadzamy dwa Qstringi i kwint32. Na końcu funkcja, zwracamy strumień. Jest to popularny idiom C++, który pozwala nam używać łańcucha operatorów

Out

Implementacja operatora > > () jest podobna do implementacji operatora

QDataStream &operator>>(QDataStream &in, Painting &painting)
{
    QString title;
    QString artist;
    quint32 year;
    in >> title >> artist >> year;
    painting = Painting(title, artist, year);
    return in;
}
To jest z: C++ GUI Programming with Qt 4 by Jasmin Blanchette, Mark Summerfield
 89
Author: Narek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 12:35:40