Once it is easy to define Q_PROPERTIES, you'll soon want to make using it easy, so I have developed some template functions to do the work. Here is a list of them:
/// A generic template for stream the properties of a Q_GADGET or QObject
template <class OT> QString DumpProperties (const OT &obj);
/// Stream the properties of a class to a QDataStream
template <class OT> QDataStream &operator<<(QDataStream &stream, const OT &obj);
/// Retrieve the properties from a QDataStream.
template <class OT> QDataStream &operator>>(QDataStream &stream, OT &obj);
/// Check that all of the properties of two objects of the same type match.
template <class T> bool ArePropertiesMatched(const T &left, const T &right);
/// Copy all of the properties from one instance to another.
template...