MapQuickItem在QML Map中不可见

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

我想在QML Map上动态绘制一个圆(通过C ++),但是根据zoomLevel,圆圈可能不可见。 MapCircle没有zoomLevel属性。因此,我首先创建一个MapQuickItem并试图将MapCircle作为其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属性,但仍然没有出现。

qt qml qtquick2 qtlocation
1个回答
0
投票

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,依此类推。顺便说一下,如果要根据缩放级别控制可见性,则应该编写可见属性的脚本。就像是:

item.visible: map.zoomLevel > 10
© www.soinside.com 2019 - 2024. All rights reserved.