Qt定位中C++与QML代码的接口
概述
Qt定位通过两种方法简化C++和QML代码之间位置数据交换。
QtPositioning中直接C++值集成
从Qt 5.5开始,将非QObject类型的数据集成到QML中变得容易。这是通过向QtQml添加Q_GADGET支持来实现的。该宏将类转换为一个轻量级的QObject版本,而无需QObject继承。同时,它保留了QMetaObject的反射能力。因此,它们可以直接暴露给QML。
许多与位置相关的数据类型被转换为Q_GADGET。它们保留了其API和值类型特征,但可以通过QMetaObject进行反省。
使用QML_ANONYMOUS宏将此类暴露给QML环境。有关更多详细信息,请参阅QQmlEngine文档以及可用的宏的完整列表。
然而,这些类并不是直接使用此宏扩展的,因为我们不希望Qt定位依赖于QtQml。因此,为它们中的每一个创建了一个辅助类,并使用QML_FOREIGN宏。
struct QGeoCoordinateForeign { Q_GADGET QML_FOREIGN(QGeoCoordinate) QML_ANONYMOUS QML_ADDED_IN_VERSION(5, 0) };
Qt定位QML插件将自动完成上述位置类型注册。
基于QVariant的集成
本节提供有关如何集成QGeoAddress和QGeoLocation的信息。
地址 - QGeoAddress
使用Address.address属性来提供C++和QML代码之间的接口。首先必须从C++获取一个指向Address对象的指针,然后使用property()和setProperty()函数来获取和设置address属性。
以下代码从C++中获取QGeoAddress对象:
QGeoAddress geoAddress = qmlObject->property("address").value<QGeoAddress>();
以下代码根据C++中的QGeoAddress对象设置QML对象的地址属性:
qmlObject->setProperty("address", QVariant::fromValue(geoAddress));
位置 - QGeoLocation
Location.location 属性用于在 C++ 和 QML 代码之间提供一个接口。首先必须从 C++ 获取一个指向 Location 对象的指针,然后使用 property() 和 setProperty() 函数来获取和设置 location
属性。
以下代码片段从 C++ 中获取 QGeoLocation 对象。
QGeoLocation geoLocation = qmlObject->property("location").value<QGeoLocation>();
以下代码片段根据从 C++ 获取的 QGeoLocation 对象设置 QML 对象的位置属性。
qmlObject->setProperty("location", QVariant::fromValue(geoLocation));
© 2024 Qt 公司有限。此处包含的文档贡献版权属于各自的所有者。此处提供的文档受 GNU 自由文档许可证第 1.3 版 的条款约束,由自由软件基金会发布。Qt 和相关商标是芬兰 Qt 公司及其在全世界范围内的商标。所有其他商标均为其各自所有者的财产。