MapQuickItem在模型/视图委托

时间:2018-03-23 12:52:39

标签: qt qml qtquick2

在QtCreator中添加新的QtQuick应用程序并使用以下代码替换main.qml将导致应用程序在鼠标单击的位置添加MapCircle。但是,如果我使用custem delegate: MapCircle [...]替换delegate: MapQuickItem [...],则会添加该项(请参阅控制台日志),但不会显示该项。

MapQuickItem [...]中的固定对象相同的Map {...}块,并显示一些坐标。

我错过了什么或者这可能是个错误吗?

import QtQuick 2.6
import QtQuick.Window 2.2
import QtPositioning 5.5
import QtLocation 5.6

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MainForm {
        anchors.fill: parent

        ListModel {
            id: mapModel
        }

        Map {
            id: map
            anchors.centerIn: parent
            anchors.fill: parent
            plugin: Plugin {
                name: "osm" // "mapboxgl", "esri", ...
            }

            MapItemView {
                model: mapModel
                /* // the following code won't display the MapQuickItem item
                delegate: MapQuickItem {
                    sourceItem: Rectangle {
                        width: 14
                        height: 14
                        color: "#2ad3f9"
                        radius: 7
                    }
                    anchorPoint: Qt.point(sourceItem.width/2, sourceItem.height/2)
                    coordinate {
                        latitude: lat
                        longitude: lon
                    }
                } */
                // this works as expected
                delegate: MapCircle {
                    radius: 8000
                    color: 'blue'
                    center {
                        latitude: lat
                        longitude: lon
                    }
                }
            }
            MouseArea
            {
                anchors.fill: parent
                onClicked:
                {
                    var coord = map.toCoordinate(Qt.point(mouse.x, mouse.y))
                    mapModel.append({lat : coord.latitude, lon: coord.longitude});
                    console.log(mapModel.count)
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

将坐标显式地转换为QtPositioning.coordinate可以解决问题:

MapItemView {
    model: mapModel
    delegate: MapQuickItem {
        sourceItem: Rectangle {
            width: 14
            height: 14
            color: "#2ad3f9"
            radius: 7
        }
        anchorPoint: Qt.point(sourceItem.width/2, sourceItem.height/2)
        coordinate : QtPositioning.coordinate(lat, lon)
    }
}