代码之家  ›  专栏  ›  技术社区  ›  Neel Basu

MapQuickItem在QML映射中不可见

  •  0
  • Neel Basu  · 技术社区  · 8 年前

    我想(通过C++)在一个平面上动态地画一个圆 QML 映射,但根据缩放级别,圆可能不可见。 MapCircle MapQuickItem 作为其 sourceItem

    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;
    }
    

    如果我只画 地图圈 zoomLevel ,我已尝试删除 zoomLevel级 属性,但仍然没有显示任何内容。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Pa_    7 年前

    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);
    

    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
    
    推荐文章