我的QtQuick项目中有一个MapPolyline
对象。我需要从C ++文件更改路径属性,但我不知道如何做到这一点。
我的qml - 文件:
MapPolyline {
id: mapline
objectName: "MapLine"
line.width: 5
line.color: "green"
path:
{[
{ latitude: 47.219791, longitude: 9.546032 },
{ latitude: 47.219657, longitude: 9.542508 },
{ latitude: 47.2194446, longitude: 9.5437876 }
]}
}
现在我想从C ++文件中更改path属性的内容。
感谢您的帮助!
答案 0 :(得分:2)
Qt位置在c ++中运行正常。你不需要搞乱任何QJSValue的东西。在QObject中创建一个属性并返回一个QVariantList。使用QGeoCoordinate(行中的点)填充QVariantList。在QML中设置MapPolyline到QObject QVariantList属性的路径。 QML会自动将QVariantList转换为Javascript数组。 QGeoCoordinates是qml坐标类型,因此转换是透明的。每当您在qml中看到“list”类型时,如果要填充Javascript对象(或创建Q_GADGET),您始终可以从c ++或QVariantMap返回QVariantList。
有一件事让我觉得我从Q ++返回的QGeoCoordinates无效。如果QGeoCoordinates无效,则MapPolyLine将无法填充并将创建一条消息:“不支持的路径类型”。在将QGeoCoordinate添加到QVariantList之前,请确保它是isValid()。
答案 1 :(得分:0)
我对Qt位置了解不多,但总的来说,我认为假设如果C ++访问某个特定(QML)API是有意义的,那就更好了。它的API。我记得this mailing list thread提到有work-in-progress change添加了C ++ API。
话虽如此,如果你很好奇并认为无论如何都要尝试很有趣,你应该看看QDeclarativePolylineMapItem::setPath()
函数,该函数调用parseCoordinate()
来做实际解析路径。它可能涉及使用QObject::findObject()
(或属性系统)在C ++中获取MapPolyline
对象,然后构造QJSValue
(使用QJSEngine
中可用的函数)匹配setPath()
的预期格式。