如何显示 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 的动态列表?的主要内容,如果未能解决你的问题,请参考以下文章