实例化器,以及动态创建的组件

问题描述 投票:0回答:1

我在 QGroundMap 覆盖方面遇到问题。我有一个自定义 QGround 小部件,我需要在 QGroundMap 上动态绘制多个 MapPolyline 对象,但唯一的方法是使用此代码直接注入它。

Component.onCompleted: {
    objMgr.createObjects([mapLine], _root.mapControl, true /* parentObjectIsMap */)
}

标准MapItemView和其他元素无法正常工作。

我正在尝试实例化多个 MapPolyLine 对象,但它也无法正常工作:

Instantiator {
    id: testInstantiator
    model: globalCoordinates

    function getIndex(index) {
        console.log("currentIndexIs")
        console.log(index)
        return index
    }

    delegate: Component {
        id: mapLine

        MapPolyline {
            id: targetPolyLine
            line.width: 3
            line.color: "red"
            z: QGroundControl.zOrderWaypointLines
            path: testInstantiator.model[index]
        }
    }
}

我的全局坐标模型如下所示:

property var globalCoordinates: [
        [QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 18)],
        [QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 20)],
        [QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 22)],
        [QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 24)],
        [QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 26)]
    ]

在实例化器中画线的唯一方法是将索引替换为数字,如下所示:

Instantiator {
    id: testInstantiator
    model: globalCoordinates

    function getIndex(index) {
        console.log("currentIndexIs")
        console.log(index)
        return index
    }

    delegate: Component {
        id: mapLine

        MapPolyline {
            id: targetPolyLine
            line.width: 3
            line.color: "red"
            z: QGroundControl.zOrderWaypointLines
            path: testInstantiator.model[1] //it will draw a single line
        }
    }
}

我怀疑,实例化器不能多次委托组件。否则无法正确传输所有必要的数据。

有什么方法可以将MapPolyLine注入到QGroundMap中,或者正确地委托注入的组件吗?

c++ qt qml qgroundcontrol
1个回答
0
投票

您可以使用

MapItemView
。 如果您的模型是一个简单的数组,我们可以将模型设置为
length - 1
。 然后我们只需使用
index
index + 1
来构造
MapPoyline

    property var globalCoordinates: [
        { latitude: -27, longitude: 153.0 },
        { latitude: -27, longitude: 154.1 },
        { latitude: -28, longitude: 153.5 },
        { latitude: -29, longitude: 153.5 }
    ]

    Map {
       id: map
       anchors.fill: parent
       plugin: mapPlugin
       zoomLevel: 14

       MapItemView {
           model: globalCoordinates.length - 1
           delegate: MapPolyline {
              line.width: 3
              line.color: 'red'
              path: [
                  globalCoordinates[index],
                  globalCoordinates[index + 1]
              ]
          }
       }
    }
© www.soinside.com 2019 - 2024. All rights reserved.