Spec-Zone.ru › Qt 5.11

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

Обзор

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

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

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

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

  • QGeoCircle
  • QGeoCoordinate
  • QGeoRectangle
  • QGeoShape

Используя QGeoCoordinate в качестве примера, типы C++ напрямую экспортируются в среду QML через их метатип:

qRegisterMetaType<QGeoCoordinate>();
QMetaType::registerEqualsComparator<QGeoCoordinate>();

Вышеуказанная регистрация QGeoCoordinate автоматически выполняется плагином QML QtPositioning один раз. Пример «Plane Spotter» демонстрирует эту функцию.

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

Этот раздел содержит информацию о том, как интегрировать QGeoAddress и QGeoLocation.

Адрес - QGeoAddress

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

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

Следующий код задаёт свойства этого объекта на основе объекта 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>();

Следующий код задаёт свойства этого объекта на основе объекта 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/archives/qt-5.11/positioning-cpp-qml.html

Spec-Zone.ru

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