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