2017-08-26 2 views
0

Ich möchte einen Kreis dynamisch zeichnen (durch C++) auf einer QML Karte, aber abhängig von der ZoomLevel, der Kreis möglicherweise nicht sichtbar. MapCircle hat keine ZoomLevel-Eigenschaft. Also erstelle ich zuerst eine MapQuickItem und versuche, eine MapCircle als sourceItem zu setzen. in QML habe ichMapQuickItem nicht in QML Map

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

Wenn ich die MapCircle ziehe nur ein Kreis auf der Karte sichtbar ist, jedoch mit dem obigen Code nichts auf jedem zoomLevel auf dem Bildschirm erscheint, habe ich versucht, die zoomLevel Eigenschaft zu entfernen, aber immer noch nichts erscheint .

Antwort

0

MapQuickItem wird verwendet, um Standard QQuickItems zur Karte hinzuzufügen. Während ein MapCircle ein QQuickItem ist, ist es nicht etwas, das Sie dort einfügen sollen. Wenn Sie mit MapQuickItem einen Kreis zur Karte hinzufügen möchten, sollten Sie ein Rechteck als Quellelement mit dem entsprechenden Radius hinzufügen. Die beiden folgenden Ansätze funktionieren

var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{}', map, "dynamic"); 
item.anchorPoint.x = 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); 

und

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.x = Qt.point(2.5,2.5) 
item.coordinate = QtPositioning.coordinate(lat, lng); 
item.zoomLevel = 10 
map.addMapItem(item); 

Beachten Sie, dass das Rechteck Größe Größe in Pixel bedeutet. Wenn Sie zoomLevel auf MapQuickItem setzen, wird es Pixel bei dieser Zoomstufe. Das bedeutet, dass das Rechteck bei Zoomstufe 10 32 Pixel breit ist. Bei Zoomstufe 9 ist es 16 und so weiter. Wenn Sie die Sichtbarkeit abhängig von der Zoomstufe steuern möchten, sollten Sie stattdessen die Eigenschaft visible skripten. Etwas wie:

item.visible: map.zoomLevel > 10