如何显示 MapQuickItem 的动态列表?

Posted

技术标签:

【中文标题】如何显示 MapQuickItem 的动态列表?【英文标题】:How can I show dynamic list of MapQuickItem? 【发布时间】:2016-09-23 22:00:41 【问题描述】:

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

【问题讨论】:

【参考方案1】:

正确答案是:使用 MapItemView :)

MapItemView 
    model: planeModel
    delegate: Plane  

【讨论】:

【参考方案2】:

基于 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 项目,而基本列表将要求它在列表计数发生变化时重新创建所有项目

【讨论】:

【参考方案3】:

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

这是我项目中的一个代码 sn-p(我猜是自证):

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

【讨论】:

以上是关于如何显示 MapQuickItem 的动态列表?的主要内容,如果未能解决你的问题,请参考以下文章

用 Loader 加载的 MapQuickItem 不显示

如何制作动态显示图表,让图表随数据动起来

在PyQt中创建MapQuickItem并将其添加到Map中

Oracle Apex - 如何在动态列表中显示图像

如何在角度2中显示动态添加的组件列表

如何在listview中使用jquery动态显示列表分隔符?