Russian Qt Forum
Май 05, 2024, 17:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: C++ объект в XML, JSON etc и назад  (Прочитано 2565 раз)
qt_newer
Гость
« : Октябрь 03, 2014, 15:08 »

Есть какой-то простой способ сделать это на абстрактном уровне (есть несколько классов приложения, для кот. это должно быть сделано) или лучше не тратить время и сделать это для каждого класса отдельно, хардкодед, так сказать Улыбающийся У меня есть несколько идей, но они мне не очень нравятся: 1я это реализовать проперти и сериалайз интерфейс как в дот.нет, 2я - для каждого класса сделать перевод в/из QSettings, а уже для этого класса реализовать (де)сериализацию в требуемый формат
Спасибо заранее!
Записан
qt_newer
Гость
« Ответ #1 : Октябрь 03, 2014, 15:15 »

P.S. Должно работать для QT 4.8
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Октябрь 03, 2014, 17:09 »

Придется вручную делать.
Записан

qt_newer
Гость
« Ответ #3 : Октябрь 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);
    }

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.