【问题标题】:Partial update repeater QML部分更新中继器 QML
【发布时间】:2015-04-30 22:28:40
【问题描述】:

我在使用 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() 时,所有点都被重绘,这就像一个缓慢的频闪效果。我只想重新绘制新点。可能吗 ?

提前谢谢你。

【问题讨论】:

  • qListPoints 包含什么?
  • 它包含 QList 其中 QObjects 来自我的 Point 类

标签: qt qml qtquick2


【解决方案1】:

我认为,例如,如果您使用源自QAbstractListModel 的适当模型,那么只有您添加/更改/删除的点将被重绘。您看到的问题可能与提到的here 相同:

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

视图只知道属性发生了变化,但对模型中的特定项目一无所知,所以它只是重绘所有内容。

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

【讨论】:

  • 如何使用 QAbstractListModel 从转发器中加载的 Point.qml 文件访问我的点类属性。目前我以 modelData.posX 为例,它可以与 QAbstractListModel 一起使用吗?
  • 您应该能够通过您在 C++ 模型中定义的角色名称访问属性:doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html#models
  • 好的,谢谢老兄。我会看看 QAbstractListModel。保持联系。感谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2013-03-27
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多