IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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++.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 adding Q_GADGET support to QtQml. The macro converts classes into a light-weight version of a QObject without the required QObject inheritance. At the same time it retains the reflection capabilities of 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 QMetaObject. This conversion was done to the following classes:

Using QGeoCoordinate as an example, the C++ types are directly exposed to the QML environment via its meta type:

 
Sélectionnez
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 and QGeoLocation.

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() and setProperty() functions to get and set the address property. The following gets the QGeoAddress representing this object from C++:

 
Sélectionnez
 QGeoAddress geoAddress = qmlObject->property("address").value<QGeoAddress>();

The following sets the properties of this object based on a QGeoAddress object from C++:

 
Sélectionnez
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() and setProperty() functions to get and set the location property. The following gets the QGeoLocation representing this object from C++:

 
Sélectionnez
QGeoLocation geoLocation = qmlObject->property("location").value<QGeoLocation>();

The following sets the properties of this object based on a QGeoLocation object from C++:

 
Sélectionnez
qmlObject->setProperty("location", QVariant::fromValue(geoLocation));

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+