如果模型发生变化,ListView 是否会重新绘制底层模型?

Does the ListView redraw the underlaying model if the model changes?

问题基本上就是标题,但更详细一些:

我已经对 QAbstractListModel 进行了子类化,让我们将其命名为 myModel。 我正在用 C++ 代码创建 myModel 的内容,然后将其输入 QML 中的 ListView。 我的代码在 C++ 代码中修改了 myModel,我可以立即在我的 ListView 中看到修改,这很好。 我的问题是,当底层模型发生变化(如添加项目)或仅绘制新项目时,ListView 会重绘其所有元素吗?

这取决于您的模型发出的信号,如果您只是覆盖一些受保护的方法,其中一些信号可能并不明显。请参阅 QAbstractItemModel Class.

中信号的文档

ListView 委托下,我检查了 Component.onCompletedComponent.onDestruction 调用了多少次。结果是,插入新项目时 Component.onCompleted 仅调用一次,删除项目时 Component.onDestruction 仅调用一次,这意味着 ListView 不会重绘插入和删除项目时的整个列表!