/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the documentation of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: http://www.gnu.org/copyleft/fdl.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page positioning-cpp-qml.html \title Interfaces between C++ and QML Code in Qt Positioning \brief Some of the providing QtPositioning QML types providing interfaces to access and modify properties in C++. \section1 Overview Depending on the type of C++ class QtPositioning utilizes two methods to simplify exchange of position data between C++ and QML code. \target Cpp_value_integration_positioning \section1 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 adding \l Q_GADGET support to QtQml. The macro converts classes into a light-weight version of a QObject without the required \l QObject inheritance. At the same time it retains the reflection capabilities of \l QMetaObject. 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 \l QMetaObject. This conversion was done to the following classes: \list \li \l QGeoCircle \li \l QGeoCoordinate \li \l QGeoRectangle \li \l QGeoShape \endlist Using \l QGeoCoordinate as an example, the C++ types are directly exposed to the QML environment via its meta type: \code qRegisterMetaType(); QMetaType::registerEqualsComparator(); \endcode The above registration of \l QGeoCoordinate is automatically done once by the QtPositioning QML plugin. The \l{Plane Spotter (QML)}{Plane Spotter} example demonstrates this feature. \section1 QVariant Based integration This section provides information on how to integrate QGeoAddress and QGeoLocation. \section2 Address - QGeoAddress The \l {QtPositioning::Address::address} {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 \l {QObject::property()}{property()} and \l {QObject::setProperty()}{setProperty()} functions to get and set the \c address property. The following gets the QGeoAddress representing this object from C++: \snippet cpp/cppqml.cpp Address get The following sets the properties of this object based on a QGeoAddress object from C++: \snippet cpp/cppqml.cpp Address set \section2 Location - QGeoLocation The \l {Location::location} {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 \l {QObject::property()}{property()} and \l {QObject::setProperty()}{setProperty()} functions to get and set the \c location property. The following gets the QGeoLocation representing this object from C++: \snippet cpp/cppqml.cpp Location get The following sets the properties of this object based on a QGeoLocation object from C++: \snippet cpp/cppqml.cpp Location set */