123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /* This file is part of qjson
- *
- * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
- #ifndef QOBJECTHELPER_H
- #define QOBJECTHELPER_H
- #include <QtCore/QLatin1String>
- #include <QtCore/QStringList>
- #include <QtCore/QVariantMap>
- class QObject;
- /**
- * @brief Class used to convert QObject into QVariant and vivce-versa.
- * During these operations only the class attributes defined as properties will
- * be considered.
- *
- * Suppose the declaration of the Person class looks like this:
- * \code
- * class Person : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
- Q_PROPERTY(Gender gender READ gender WRITE setGender)
- Q_PROPERTY(QDate dob READ dob WRITE setDob)
- Q_ENUMS(Gender)
- public:
- Person(QObject* parent = 0);
- ~Person();
- QString name() const;
- void setName(const QString& name);
- int phoneNumber() const;
- void setPhoneNumber(const int phoneNumber);
- enum Gender {Male, Female};
- void setGender(Gender gender);
- Gender gender() const;
- QDate dob() const;
- void setDob(const QDate& dob);
- private:
- QString m_name;
- int m_phoneNumber;
- Gender m_gender;
- QDate m_dob;
- };
- \endcode
- The following code will serialize an instance of Person to JSON :
- \code
- Person person;
- person.setName("Flavio");
- person.setPhoneNumber(123456);
- person.setGender(Person::Male);
- person.setDob(QDate(1982, 7, 12));
- QVariantMap variant = QObjectHelper::qobject2qvariant(&person);
- Serializer serializer;
- qDebug() << serializer.serialize( variant);
- \endcode
- The generated output will be:
- \code
- { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
- \endcode
- It's also possible to initialize a QObject using the values stored inside of
- a QVariantMap.
- Suppose you have the following JSON data stored into a QString:
- \code
- { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
- \endcode
- The following code will initialize an already allocated instance of Person
- using the JSON values:
- \code
- Parser parser;
- QVariant variant = parser.parse(json);
- Person person;
- QObjectHelper::qvariant2qobject(variant.toMap(), &person);
- \endcode
- \sa Parser
- \sa Serializer
- */
- class QObjectHelper {
- public:
- QObjectHelper();
- ~QObjectHelper();
-
- /**
- * This method converts a QObject instance into a QVariantMap.
- *
- * @param object The QObject instance to be converted.
- * @param ignoredProperties Properties that won't be converted.
- */
- static QVariantMap qobject2qvariant( const QObject* object,
- const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName"))));
- /**
- * This method converts a QVariantMap instance into a QObject
- *
- * @param object The QObject instance to be converted.
- */
- static void qvariant2qobject(const QVariantMap& variant, QObject* object);
- private:
- Q_DISABLE_COPY(QObjectHelper)
- class QObjectHelperPrivate;
- QObjectHelperPrivate* const d;
- };
- #endif // QOBJECTHELPER_H
|