2017-09-02 2 views
1

Ich habe einen Satz von QPointF in MarkerModel welche Unterklassen von AbstractListModel. Jeder dieser Marker hat einen Status, abhängig davon, welche Farbe er hat. Ich möchte alle diese Markierungen auf der Karte zusammen mit einer Polylinie zeichnen, die alle Punkte mit einem bestimmten Status verbindet. Und ich werde das Modell von C++ Seite aktualisieren. Das ist mein QMLAbstractItemModel zu QML Route

Map { 
    id: map 
    anchors.fill: parent 
    plugin: mapPlugin 
    center: QtPositioning.coordinate(22.5726, 88.3639) 
    zoomLevel: 14 

    MapItemView { 
     model: markerModel 
     // delegate: markerDelegate // markerDelegate works 
     delegate: routeDelegate // routeDelegate does not work 
    } 

    Component { 
     id: markerDelegate 

     MapQuickItem{ 
      anchorPoint: Qt.point(2.5, 2.5) 
      coordinate: QtPositioning.coordinate(position.x, position.y) 
      zoomLevel: 0 
      sourceItem: Rectangle{ 
       width: settings.marker_size; 
       height: settings.marker_size; 
       radius: settings.marker_size/2; 
       color: settings.marker_colors[status] 
       border.color: "white" 
       border.width: 1 
      } 
     } 
    } 
    Component{ 
     id: routeDelegate 

     MapRoute{ 
      route: markerModel 
      line.color: "blue" 
      line.width: 5 
      smooth: true 
      opacity: 0.8 
     } 
    } 
} 

Ich möchte eigentlich beide, die Punkte und die Polylinie auf der Szene. Da ich jedoch nicht weiß, wie ich beide in die Szene bringen soll, habe ich zuerst versucht, die Punkte aus dem Modell mit markerDelegate zu zeigen, was funktionierte. Jetzt möchte ich diese Punkte als eine Polylinie mit routeDelegate betrachten. Aber es klagt

Unable MarkerModel zu QDeclarativeGeoRoute

Antwort

0

zuweisen Wenn Sie MapRoute von einem RouteModel durch eine MapItemView beziehen, können Sie immer zuweisen Routedata zu routen. routeData ist die role, die RouteModel verfügbar macht, damit Sie auf die Routenelemente zugreifen können.

Nun, für Ihren speziellen Fall scheint MapRoute ungeeignet zu sein. Der beste Ansatz scheint mir zwei separate Modelle zu haben: Eines, das ein js-Array pro Zeile ausgibt, das Sie der path-Eigenschaft eines MapPolyline-Delegaten zuweisen, und eines, das eine QGeoCoordinate pro Zeile ausgibt (so viel mehr Zeilen) Verwendung mit einem MapCircle- oder MapQuickItem-Delegaten

+0

Leider habe ich nicht verstanden, 'markerModel' ist eigentlich eine Unterklasse von' AbstractListModel'. Ich weiß nicht, wie man ein 'RouteModel' in QT (C++) erstellt. –

+0

Ok, sorry, ich bin vom Beispiel verwirrt, vielleicht kannst du es reparieren und nur den Delegaten behalten, den du benutzt? Wenn Sie eine MapRoute mit einem Modell verwenden möchten, das kein RouteModel ist, müssen Sie in Ihrem Modell eine Rolle definieren, über die Sie Routenobjekte (QDeclarativeGeoRoute) bereitstellen. Bearbeiten: tatsächlich, jetzt, dass ich Ihre Frage erneut lesen, können Sie QPointF verwenden, um eine MapRoute oder eine MapPolyline zu erstellen. Sie müssen sie zuerst in QGeoCoordinates konvertieren. –

+0

Wie kann ich QDeclarativeGeoRoute-Objekte aus C++ erstellen? Wo ist diese Klasse? –

Verwandte Themen