Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qt_newer от Октябрь 03, 2014, 15:08



Название: C++ объект в XML, JSON etc и назад
Отправлено: qt_newer от Октябрь 03, 2014, 15:08
Есть какой-то простой способ сделать это на абстрактном уровне (есть несколько классов приложения, для кот. это должно быть сделано) или лучше не тратить время и сделать это для каждого класса отдельно, хардкодед, так сказать :) У меня есть несколько идей, но они мне не очень нравятся: 1я это реализовать проперти и сериалайз интерфейс как в дот.нет, 2я - для каждого класса сделать перевод в/из QSettings, а уже для этого класса реализовать (де)сериализацию в требуемый формат
Спасибо заранее!


Название: Re: C++ объект в XML, JSON etc и назад
Отправлено: qt_newer от Октябрь 03, 2014, 15:15
P.S. Должно работать для QT 4.8


Название: Re: C++ объект в XML, JSON etc и назад
Отправлено: gil9red от Октябрь 03, 2014, 17:09
Придется вручную делать.


Название: Re: C++ объект в XML, JSON etc и назад
Отправлено: qt_newer от Октябрь 03, 2014, 17:40
все-таки, такой вариант реализую (гугл помог :)

В классе задать
    Q_OBJECT

    Q_PROPERTY(QString message READ message WRITE setMessage)
...
void setMessage(const QString &v) { mMessage = v; }
QString message() const { return mMessage; }

private:
QString mMessage;

и потом,
    QDomDocument doc;
    QDomElement root = doc.createElement(object->metaObject()->className());
    doc.appendChild(root);

    for(int i = 0; i < object->metaObject()->propertyCount(); i++)
    {
        QMetaProperty prop = object->metaObject()->property(i);
        QString propName = prop.name();

        if(propName == "objectName") continue;
        QDomElement el = doc.createElement(propName);
        QVariant value = object->property(propName.toLatin1().data());
        QDomText txt = doc.createTextNode( value.toString() );
        el.appendChild(txt);
        root.appendChild(el);
    }