1

我想用来自QAbstractListModel. 似乎有两个 Qml 工具适用于此,MapItemView[1] 和Repeater[2]。TheRepeater更强大(例如它允许嵌套模型) - 那么有什么理由使用 theMapItemView而不是 a 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

4

1 回答 1

5

你应该使用MapItemView它。Repeater仅当您创建时使用才有效Map,如果您之后在模型中添加元素,则不会将委托添加到地图中。

Repeater它首先起作用但之后不起作用的事实是因为:

  • 父母他的代表给他的Repeater父母,这是Map
  • 然后,该Map对象在创建时扫描其子项一次(在等效于 的 c++ 函数中Component.onCompleted
  • 在此扫描中,作为MapItem派生对象的子对象被添加到地图中,就像手动调用时一样Map.addMapItem()
  • 之后由 the 创建的代表Repeater只是作为父对象,Map但并没有真正“添加”到它。

由于MapItemView知道Map它可以将代表添加到Map它创建它们的时候。

的限制之一MapItemView是它仅适用于QAbstractItemModel和派生。这意味着它可以与 aListModel或 c++ 模型一起使用,但不能与 js 数组或整数作为模型之类的“哑”模型一起使用。

于 2017-08-07T15:41:38.270 回答