Qt

2010-04-03 39 views
46
ile seri hale getirme

Qt kitaplığı ile bir GUI programlama yapıyorum. GUI'de büyük bir std :: map var.Qt

"MyType", farklı türde alanlara sahip bir sınıftır.

std :: haritasını serileştirmek istiyorum. Bunu nasıl yapabilirim? Qt bize olağanüstü özellikler sağlıyor mu? QDataStream çeşitli C++ ve Qt veri türlerini işler.

cevap

85

Tam liste http://doc.qt.io/qt-4.8/datastreamformat.html adresinde mevcuttur. Ayrıca, < < ve >> operatörlerini aşırı yükleyerek kendi özel türlerimize destek ekleyebiliriz. İşte

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); 

biz < < operatörü uygulamak nasıl oluyor: İşte QDataStream ile kullanılabilen özel bir veri türünün tanımı var çıkışına için

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

bir Boyama, biz sadece çıkış iki Qstringleri ve Bir quint32. İşlevin sonunda akışı döndürürüz. Bu, bir çıkış akışı olan < < operatör zincirini kullanmamıza izin veren yaygın bir C++ deyimidir. Örneğin:

< painting1 < < < üzerinden painting2 < < painting3;

QDataStream &operator>>(QDataStream &in, Painting &painting) 
{ 
    QString title; 
    QString artist; 
    quint32 year; 
    in >> title >> artist >> year; 
    painting = Painting(title, artist, year); 
    return in; 
} 

Bu dan: Jasmin Blanchette tarafından Qt 4 ile C++ GUI Programlama Mark Summerfield

+0

It

operatör uygulanması >>() operatörü < <() benzer olduğunu desteklenen tip listesinin eksik olduğunu bana şaşırttı: muhtemelen sadece çapraz platform veya sabit olan serileştirme türlerine gönderme yapıyor. Örneğin, 'QSet' listede yok. –

+0

'QGeoCoordinate' bir başka örnektir. –