如何显示MapQuickItem的动态列表?

时间:2016-09-23 22:00:42

标签: qt model qml

如何显示http://doc.qt.io/qt-5/qtlocation-planespotter-example.html示例中的平面动态列表示例? 我想在地图中添加和删除项目。并刷新每个更改的项目。 我需要在地图上将QList或QAbstractItemModel中的对象显示为MapQuickItem。

3 个答案:

答案 0 :(得分:1)

正确答案是:使用MapItemView:)

MapItemView {
    model: planeModel
    delegate: Plane { }
}

答案 1 :(得分:0)

基于QList的属性或QAbstractListModel派生类都可以工作。

在QML方面,您可以使用Repeater作为其委托使用Plane类型的model模型,从Map { Repeater { model: listOrModelFromCpp delegate: Plane { cooridinate: model.position // or model.modelData for a QList<QGeoCoordinate> as the listOrModelFromCpp } } } 句柄

获取坐标

有点像这样

QAbstractListModel

使用自定义Repeater派生模型的优势在于Plane可以单独创建和销毁{{1}}项,而基本列表则需要在列表计数时重新创建所有项目变化

答案 2 :(得分:0)

Map有2种动态操作项的方法: void addMapItem(MapItem item)void clearMapItems()

以下是我项目中的代码片段(我猜相当自我记录):

function clearTargets()
{
   map.clearMapItems();
}

function showPlaneItems( planeItemsToShow )
{
   for ( var idx = 0; idx < planeItemsToShow.length; idx++ ) {
      var item = planeItemsToShow[idx];

      var itemComponent = Qt.createComponent("qrc:/components/Plane.qml");
      if ( itemComponent.status == Component.Ready ) {
         var itemObject = itemComponent.createObject( map,
                                      {
                                         "planeName" : item["targetName"],
                                         "coordinate" : QtPositioning.coordinate(item["targetLattitude"],
                                                                                 item["targetLongitude"] )
                                      }
                                    );
         if ( itemObject != null ) {
            map.addMapItem( itemObject );
         }
      }
   }
}