Interfaces between C++ and QML Code in Qt Positioning¶
Some of the providing QtPositioning QML types providing interfaces to access and modify properties in C++.
Overview¶
Depending on the type of C++ class QtPositioning utilizes two methods to simplify exchange of position data between C++ and QML code.
Direct C++ Value Integration in QtPositioning¶
Starting with Qt 5.5, it has become much easier to integrate non-
QObject
based data types into QML. This is achieved by addingQ_GADGET
support to QtQml . The macro converts classes into a light-weight version of aQObject
without the requiredQObject
inheritance. At the same time it retains the reflection capabilities ofQMetaObject
. As a result they can be directly exposed to QML and do not require any further wrapper classes.A significant number of Position and Location related data types were converted to Q_GADGETs. They retain their API and value type character but have become introspectable via
QMetaObject
. This conversion was done to the following classes:
QGeoCircle
QGeoCoordinate
QGeoRectangle
QGeoShape
Using
QGeoCoordinate
as an example, the C++ types are directly exposed to the QML environment via its meta type:qRegisterMetaType<QGeoCoordinate>(); QMetaType::registerEqualsComparator<QGeoCoordinate>();The above registration of
QGeoCoordinate
is automatically done once by the QtPositioning QML plugin. The Plane Spotter example demonstrates this feature.
QVariant Based integration¶
This section provides information on how to integrate
QGeoAddress
andQGeoLocation
.
Address - QGeoAddress¶
The Address.address property is used to provide an interface between C++ and QML code. First a pointer to a Address object must be obtained from C++, then use the
property()
andsetProperty()
functions to get and set theaddress
property. The following gets theQGeoAddress
representing this object from C++:QGeoAddress geoAddress = qmlObject->property("address").value<QGeoAddress>();The following sets the properties of this object based on a
QGeoAddress
object from C++:qmlObject->setProperty("address", QVariant::fromValue(geoAddress));
Location - QGeoLocation¶
The Location.location property is used to provide an interface between C++ and QML code. First a pointer to a Location object must be obtained from C++, then use the
property()
andsetProperty()
functions to get and set thelocation
property. The following gets theQGeoLocation
representing this object from C++:QGeoLocation geoLocation = qmlObject->property("location").value<QGeoLocation>();The following sets the properties of this object based on a
QGeoLocation
object from C++:qmlObject->setProperty("location", QVariant::fromValue(geoLocation));
© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.