Смотрю на форумах рунета, люди начинают писать на C++&Qt Quick и используют наследников от **QObject**, для так называемых типов значений(Value Type). Мартин Фаулер их называет **Value Object**. Хотя есть макрос **Q\_GADGET** позволяющий использовать QMetaObject c некоторыми ограничениями, но без наследования от QObject. Все что будет описано ниже результат экспериментов с Qt Quick. Буду рад узнать что-то новое из комментариев.
Пример таких типов QPoint, QGeoCoordinate и т.д. Наследоваться от **QObject** и использовать макрос **Q\_OBJECT** неудобно для таких типов:
* QObject защищен от копирования;
* нужно возвращать значение по указателю. Приходится задумываться о CppOwnership/JavaScriptOwnership из перечисления [QQmlEngine::ObjectOwnership][1].
**Q\_GADGET** позволяет нам использовать:
* **Q\_ENUM**;
* **Q\_PROPERTY**;
* **Q\_INVOKABLE**.
Ограничение:
* Отсутствие поддержки сигналов и слотов.[Читать дальше →][2]
[1]:
http://doc.qt.io/qt-5/qqmlengine.html#ObjectOwnership-enum
[2]:
https://habrahabr.ru/post/307816/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut