Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt MapQuickItem在QML映射中不可见_Qt_Qml_Qtquick2_Qtlocation - Fatal编程技术网

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