问题基本上是标题,但更详细:
我已经对 进行了子类化QAbstractListModel
,我们来命名它myModel
。我正在myModel
用 c++ 代码创建内容,然后将其输入到ListView
QML 中。我的代码myModel
在 C++ 代码中进行了修改,我可以立即在我的 中看到修改ListView
,这很好。我的问题是,ListView
当底层模型更改(如添加项目)或仅绘制新项目时,是否会重绘所有元素?
问题基本上是标题,但更详细:
我已经对 进行了子类化QAbstractListModel
,我们来命名它myModel
。我正在myModel
用 c++ 代码创建内容,然后将其输入到ListView
QML 中。我的代码myModel
在 C++ 代码中进行了修改,我可以立即在我的 中看到修改ListView
,这很好。我的问题是,ListView
当底层模型更改(如添加项目)或仅绘制新项目时,是否会重绘所有元素?
这取决于您模型发出的信号,如果您只是覆盖一些受保护的方法,其中一些可能并不明显。请参阅 QAbstractItemModel 类中的信号文档。
在ListView
委托下,我检查了多少次Component.onCompleted
并Component.onDestruction
打电话。结果是,当插入一个新项目时,Component.onCompleted
它只被调用一次,而当一个项目被移除时,Component.onDestruction
它只被调用一次,这意味着ListView
在插入和移除项目时不会重绘整个列表!