【问题标题】:How to set QML MapPolyline Path Property如何设置 QML MapPolyline 路径属性
【发布时间】:2015-09-15 11:35:46
【问题描述】:

我的 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++ 文件中更改路径属性的内容。

感谢您的帮助!

【问题讨论】:

  • 查看这个答案,它解释了如何在地图上绘制路径Answer

标签: qt qml qtquick2


【解决方案1】:

Qt Location 在 c++ 中可以正常工作。你不需要弄乱任何 QJSValue 的东西。在您的 QObject 中创建一个属性并返回一个 QVariantList。用 QGeoCoordinate(你的行中的点)填充 QVariantList。在 QML 中,将 MapPolyline 的路径设置为 QObject QVariantList 属性。 QML 会自动将 QVariantList 转换为 Javascript 数组。 QGeoCoordinates 是 qml 坐标类型,所以转换是透明的。每当您在 qml 中看到“列表”类型时,如果您想填充 Javascript 对象(或创建 Q_GADGET),您总是可以从 c++ 或 QVariantMap 返回 QVariantList。

让我感动的一件事是我从 c++ 返回的 QGeoCoordinates 无效。如果 QGeoCoordinates 无效,则 MapPolyLine 无法填充并将创建一条消息:“不支持的路径类型”。在将其添加到 QVariantList 之前,请确保 QGeoCoordinate isValid()。

【讨论】:

  • 使用转换为QVariantList 是一个很好的提示,对我有用:path->property("path").value<QVariantList>();
【解决方案2】:

我对 Qt Location 了解不多,但总的来说,我认为最好假设如果 C++ 访问特定 (QML) API 是有意的,那么会有一个 C++ API 用于它。我记得this mailing list thread提到有一个work-in-progress change添加了一个C++ API。

话虽如此,如果您很好奇并认为无论如何尝试都会很有趣,您应该查看QDeclarativePolylineMapItem::setPath() 函数,该函数调用parseCoordinate() 来执行路径的实际解析。它可能涉及使用QObject::findObject()(或属性系统)在C++中获取MapPolyline对象,然后构造一个匹配setPath()的预期格式的QJSValue(使用QJSEngine中可用的函数) .

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多