Чтение / запись QObjects - PullRequest
       6

Чтение / запись QObjects

7 голосов
/ 14 сентября 2009

I думаю Я могу написать 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;
}

Что, если это правда, я не знаю, почему в QObject этот метод еще не реализован, потому что он довольно общий. Но это не главное. Как бы я прочитал файл? т.е. реализовать эту функцию?

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

Я думаю, что могу каким-то образом использовать ds.readBytes, но как узнать длину свойства?

PS: Если это не было очевидно, Object - это мой пользовательский класс, который наследуется от QObject.

1 Ответ

6 голосов
/ 14 сентября 2009

Это похоже на работу.

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

Спасибо Евгению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...