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