Qt/Qml: Repeater против MapItemView для элементов карты
Я хочу заполнить карту Qml элементами карты (например, MapCircle,...) из QAbstractListModel
, Кажется, для этого есть два инструмента Qml, MapItemView
[1] и Repeater
[2]. Repeater
является более мощным (например, он позволяет вложенные модели) - так есть ли основания использовать MapItemView
вместо Repeater
?
С Уважением,
[1] http://doc.qt.io/qt-5/qml-qtlocation-mapitemview.html
[2] http://doc.qt.io/qt-5/qml-qtquick-repeater.html
Источник MapItemView: http://code.qt.io/cgit/qt/qtlocation.git/tree/src/location/declarativemaps/qdeclarativegeomapitemview.cpp
Источник повторителя: http://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quick/items/qquickrepeater.cpp
1 ответ
Вы должны использовать MapItemView
для этого. С помощью Repeater
работает только при создании Map
, если вы добавите элементы в вашу модель впоследствии, ни один делегат не будет добавлен на карту.
Тот факт, что это работает сначала с Repeater
но не потом, потому что:
-
Repeater
родители его делегат его родителю, который являетсяMap
-
Map
Затем объект сканирует свои дочерние элементы один раз при создании (в функции C++, эквивалентнойComponent.onCompleted
) - После этого сканирования дети, которые
MapItem
объекты добавляются на карту, как при ручном вызовеMap.addMapItem()
- Делегаты, созданные после этого
Repeater
только что родилисьMap
но на самом деле не "добавил" к нему.
поскольку MapItemView
знает о Map
он может добавить делегатов к Map
когда он их создает.
Одно из ограничений MapItemView
является то, что это работает только с QAbstractItemModel
и выведено. Это означает, что он может работать с ListModel
или модель C++, но не с "тупой" моделью, такой как массив js или целое число в качестве модели.