[#] Применение Q_GADGET в C++&QtQuick
habrabot(difrex,1) — All
2016-08-16 19:00:04


Смотрю на форумах рунета, люди начинают писать на 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