读/写QObjects

时间:2009-09-13 23:14:20

标签: c++ qt file-io

我可以利用QObject来写这样的Q_PROPERTY

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

如果这是真的,我不知道为什么QObject没有实现该方法,因为它非常通用。但这不仅仅是重点。我怎么读这个文件?即,实现这个功能?

QDataStream &operator>>(QDataStream &ds, Object &obj) {
    return ds;
}

我想我可以某种方式使用ds.readBytes,但我怎样才能获得该物业的长度?

PS:如果不明显,Object是我的自定义类,它继承自QObject

1 个答案:

答案 0 :(得分:6)

这似乎有效。

QDataStream &operator>>(QDataStream &ds, Object &obj) {
    QVariant var;
    for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
        if(obj.metaObject()->property(i).isStored(&obj)) {
            ds >> var;
            obj.metaObject()->property(i).write(&obj, var);
        }
    }
    return ds;
}

感谢Eugene