Qt MapQuickItem在QML映射中不可见
我想在Qt MapQuickItem在QML映射中不可见,qt,qml,qtquick2,qtlocation,Qt,Qml,Qtquick2,Qtlocation,我想在QML地图上动态地(通过C++)绘制一个圆,但根据缩放级别的不同,圆可能不可见MapCircle没有zoomLevel属性。因此,我首先创建一个MapQuickItem,并尝试将一个MapCircle作为它的sourceItem。在QML中,我有 function add_point(lat, lng){ var circle = Qt.createQmlObject('import QtLocation 5.3; MapCircle { }', map, "dynamic");
QML
地图上动态地(通过C++)绘制一个圆,但根据缩放级别的不同,圆可能不可见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
属性,但仍然没有显示任何内容。MapQuickItem用于向地图添加标准QQuickItems。虽然MapCircle是一个QQuickItem,但它不是您应该放在其中的东西。
如果要通过MapQuickItem将圆添加到地图中,则应添加一个矩形作为源项,并具有适当的半径。
以下两种方法都有效
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);
及
请记住,矩形大小表示像素大小。将zoomLevel设置为MapQuickItem时,它将成为该缩放级别的像素。
这意味着在缩放级别10时,矩形将为32像素宽。在缩放级别9时,它将是16,依此类推。
顺便说一下,如果希望根据缩放级别控制可见性,则应该编写visible属性的脚本。
比如:
item.visible: map.zoomLevel > 10
item.visible: map.zoomLevel > 10