io penso posso scrivere una QObject
come questo sfruttando le Q_PROPERTY
s:lettura QObject/scrittura
QDataStream &operator<<(QDataStream &ds, const Object &obj) {
for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
if(obj.metaObject()->property(i).isStored(&obj)) {
ds << obj.metaObject()->property(i).read(&obj);
}
}
return ds;
}
Il che, se questo è vero, non so il motivo per cui non lo fanno QObject
s il metodo è già implementato perché è piuttosto generico. Ma questo è oltre il punto. Come leggerei il file? cioè, implementa questa funzione?
QDataStream &operator>>(QDataStream &ds, Object &obj) {
return ds;
}
Sto pensando che posso usare in qualche modo ds.readBytes
ma come faccio a ottenere la lunghezza della proprietà?
PS: Se non era ovvio, Object
è la mia classe personalizzata che eredita da QObject
.
Non penso che QObjects debba essere serializzabile. Non puoi nemmeno copiarli. Per quanto riguarda la lettura di QVariant, è molto semplice (basta leggerlo con >> in QVariant vuoto), o difficile - devi gestire da solo il tipo e la lunghezza. – Eugene
Se stai cercando la serializzazione, potresti dare un'occhiata a Boost.Serialize. –
@Eugene: Avrebbe dovuto postare quella risposta ... per qualche ragione non mi è venuto in mente che potevo leggere nel 'QVariant'. Ho pensato che sarebbero stati tutti di dimensioni diverse o qualcosa del genere, ma non è così che funziona il C++. – mpen