0

我想在地图上动态地(通过 C++)绘制一个圆圈QML,但是根据缩放级别,圆圈可能不可见。MapCircle没有 zoomLevel 属性。所以我首先创建 aMapQuickItem并尝试将 aMapCircle作为它的sourceItem. 在 QML 我有

function add_point(lat, lng){
    var circle = Qt.createQmlObject('import QtLocation 5.3; MapCircle { }', map, "dynamic");
    circle.center = QtPositioning.coordinate(lat, lng);
    circle.radius = 5.0;
    circle.color = 'blue';
    circle.border.width = 1;
    var item = Qt.createQmlObject('import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
    item.anchorPoint.x = 2.5;
    item.anchorPoint.y = 2.5;
    item.coordinate = QtPositioning.coordinate(lat, lng);
    item.sourceItem = circle;
    item.zoomLevel = 19.0
    map.addMapItem(item);
    map.points.push(item);
    return true;
}

如果我只是在地图上画了MapCircle一个圆圈,但是上面的代码在任何屏幕上都没有出现任何内容zoomLevel,我尝试删除该zoomLevel属性,但仍然没有出现。

4

1 回答 1

1

MapQuickItem 用于将标准 QQuickItems 添加到地图。虽然 MapCircle 是一个 QQuickItem,但它不是你应该放在那里的东西。如果您想通过 MapQuickItem 向地图添加一个圆,您应该添加一个 Rectangle 作为源项,并具有适当的半径。以下两种方法都有效

var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
var circle = Qt.createQmlObject('import QtQuick 2.7; Rectangle{ width: 32; height: 32; radius: 16}', map);
item.sourceItem = circle
map.addMapItem(item);

var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{ sourceItem: Rectangle{ width: 32; height: 32; radius: 16}}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
map.addMapItem(item);

请记住,矩形大小是指以像素为单位的大小。当您将 zoomLevel 设置为 MapQuickItem 时,它会变成该缩放级别的像素。这意味着在缩放级别 10 时,矩形将是 32 像素宽。在缩放级别 9 时,它将是 16,依此类推。顺便说一句,如果您想根据缩放级别控制可见性,您应该编写 visible 属性。就像是:

item.visible: map.zoomLevel > 10
于 2017-08-27T19:26:01.573 回答