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?
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 SummerfieldWarning: 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