【问题标题】:Does the ListView redraw the underlaying model if the model changes?如果模型发生变化,ListView 是否会重绘底层模型?
【发布时间】:2016-03-03 21:43:16
【问题描述】:
问题基本上是标题,但更详细:
我已将QAbstractListModel 子类化,我们将其命名为myModel。
我在 C++ 代码中创建 myModel 的内容,然后将其输入到 QML 中的 ListView 中。
我的代码在 C++ 代码中修改了myModel,我可以在我的ListView 中立即看到修改,这很好。
我的问题是,ListView 是否会在底层模型更改(如添加项目)或仅绘制新项目时重绘其所有元素?
【问题讨论】:
标签:
qt
listview
qml
qt5
qabstractlistmodel
【解决方案1】:
这取决于你的模型发出什么信号,如果你只是覆盖一些受保护的方法,其中一些可能并不明显。请参阅 QAbstractItemModel 类中的信号文档。
【解决方案2】:
在ListView 委托下,我检查了Component.onCompleted 和Component.onDestruction 调用了多少次。结果是,当插入一个新项目时,Component.onCompleted 只被调用一次,而当一个项目被删除时,Component.onDestruction 只被调用一次,这意味着ListView 在插入和删除项目!