Yo creo Puedo escribir una QObject
como esto mediante el aprovechamiento de las Q_PROPERTY
s:lectura QObjects/escritura
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;
}
Lo cual, si eso es cierto, no sé por qué no lo hacen s QObject
ya tiene implementado ese método porque es bastante genérico. Pero eso es además del punto. ¿Cómo leería el archivo? es decir, ¿implementar esta función?
QDataStream &operator>>(QDataStream &ds, Object &obj) {
return ds;
}
Estoy pensando en alguna manera puedo usar ds.readBytes
pero ¿cómo iba a obtener la longitud de la propiedad?
PD: Si no fue obvio, Object
es mi clase personalizada que hereda de QObject
.
No creo que se suponga que QObjects sea serializable. Ni siquiera puedes copiarlos. En cuanto a leer QVariant, es muy fácil (solo léalo con >> en QVariant vacío), o difícil: debe manejar el tipo y la longitud usted mismo. – Eugene
Si está buscando la serialización, es posible que desee consultar Boost.Serialize. –
@Eugene: Debería haber publicado eso como una respuesta ... por alguna razón no se me ocurrió que podía leer en el 'QVariant'. Pensé que serían de diferentes tamaños o algo así, pero así no es como funciona C++. – mpen