如何设置QML MapPolyline路径属性

时间:2015-09-15 11:35:46

标签: qt qml qtquick2

我的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属性的内容。

感谢您的帮助!

2 个答案:

答案 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()的预期格式。