Spec-Zone.ru › Qt

Интерфейсы между кодом C++ и QML в Qt Positioning

Обзор

Qt Positioning использует два метода для упрощения обмена данными о местоположении между кодом C++ и QML.

Прямая интеграция значений C++ в QtPositioning

Начиная с Qt 5.5, стало намного проще интегрировать типы данных, не основанные на QObject, в QML. Это достигается добавлением поддержки Q_GADGET в QtQml. Макрос преобразует классы в облегченную версию QObject без необходимости наследования от QObject. В то же время сохраняются возможности рефлексии QMetaObject. В результате их можно напрямую использовать в QML.

Значительное количество типов данных, связанных с местоположением, было преобразовано в Q_GADGETы. Они сохраняют свой API и свойства типа значения, но стали интроспективными через QMetaObject.

Макрос QML_ANONYMOUS используется для экспорта этих типов в среду QML. Подробности и полный список доступных макросов см. в документации QQmlEngine.

Однако классы напрямую не расширяются этим макросом, потому что мы не хотим, чтобы Qt Positioning зависел от QtQml. Поэтому для каждого из них создается вспомогательный класс, и используется макрос QML_FOREIGN:

struct QGeoCoordinateForeign
{
    Q_GADGET
    QML_FOREIGN(QGeoCoordinate)
    QML_ANONYMOUS
    QML_ADDED_IN_VERSION(5, 0)
};

Вышеуказанная регистрация типов Positioning выполняется автоматически плагином QML QtPositioning.

Интеграция на основе QVariant

В этом разделе приводится информация о том, как интегрировать QGeoAddress и QGeoLocation.

Адрес - QGeoAddress

Свойство Address.address используется для обеспечения интерфейса между кодом C++ и QML. Сначала необходимо получить указатель на объект Address из C++, затем использовать функции property() и setProperty() для получения и установки свойства address.

Следующий фрагмент кода получает объект QGeoAddress из C++:

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

Следующий фрагмент кода устанавливает свойство address объекта QML на основе объекта QGeoAddress из C++:

qmlObject->setProperty("address", QVariant::fromValue(geoAddress));

Местоположение - QGeoLocation

Свойство Location.location используется для обеспечения интерфейса между кодом C++ и QML. Сначала необходимо получить указатель на объект Location из C++, затем использовать функции property() и setProperty() для получения и установки свойства location.

Следующий фрагмент кода получает объект QGeoLocation из C++:

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

Следующий фрагмент кода устанавливает свойство location объекта QML на основе объекта QGeoLocation из C++:

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

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/positioning-cpp-qml.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API