部分更新转发器QML

时间:2015-04-30 13:58:12

标签: qt qml qtquick2

我面临着QML / C ++项目的一个小问题。我正在使用转发器在Rectangle中绘制点,这些点来自模型。这是我的代码:

main.qml

Rectangle { 
      id: rect
      height:500
      width:500
      Repeater {
          id: pointsRepeater
          model: qListPoints
          Point {
          }
      }
}

qListPoints来自我写的C ++: Q_PROPERTY( QVariant qListPoints READ getListPoints NOTIFY listPointsChanged)

所以基本上当我添加或更新列表点时,我会发出listPointsChanged(),而我的main.qml会从列表中重新绘制新的或更新的点。我的问题是当我向我的列表中添加点并且我发出listPointsChanged()时,所有点都被重绘,这就像一个缓慢的频闪效果。我只想要重新绘制新点。可能吗 ?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为,如果你使用了从QAbstractListModel派生的正确模型,那么只会重新绘制你添加/更改/删除的点。您所看到的问题可能与提到here的问题相同:

  

注意:视图无法知道QList的内容已更改。如果QList发生变化,则需要通过再次调用QQmlContext :: setContextProperty()来重置模型。

视图只知道该属性已更改,但它对该模型中的特定项目一无所知,因此它只是重绘所有内容。

Using C++ Models with Qt Quick Views有更多相关信息。