代码之家  ›  专栏  ›  技术社区  ›  mpen

读/写对象

  •  7
  • mpen  · 技术社区  · 16 年前

    认为 我可以写 QObject 像这样利用 Q_PROPERTY S:

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

    如果这是真的,我不知道为什么 QObjor 尚未实现该方法,因为它非常通用。但这也不重要。我该如何读取文件?也就是说,实现这个功能?

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

    我想我可以用 ds.readBytes 但是我怎样才能得到房子的长度呢?

    PS: 如果不明显, Object 是从继承的自定义类 QObjor .

    1 回复  |  直到 10 年前
        1
  •  6
  •   Community CDub    8 年前

    这似乎奏效了。

    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 .