QAbstractItemModel - QModelIndex 对象在创建时是否应该被缓存?

问题描述

在子类化 qabstractitemmodel 并重新实现 index() 方法时,我每次都使用 createIndex() 简单地返回一个新索引。但我注意到,当模型与视图结合使用时,index() 方法会被调用数千次,用于各种绘制事件等。

我是否应该在 QModelIndex 中第一次生成后缓存 index() 对象,然后在随后在同一行上调用 index() 时返回缓存的索引/科尔?文档中没有提到它,而且索引本身似乎在某些情况下会失效,所以我不确定在这里做什么。

在我的特殊情况下,我正在使用 Pyside6,但我认为这适用于 Qt 框架的任何实现。

解决方法

如果您的模型支持插入或删除行,则您的索引不是持久的。您仍然可以使用缓存,但每次模型形状更改时都必须使缓存无效。 如果创建索引逻辑很复杂,缓存可能会有好处。 QModelIndex 的大小大约是四个整数(行、列和指针/id 和指针),因此它相对轻量级,创建和移动它的成本很低。 无论哪种方式,只有一种方法可以确定:尝试缓存并测量性能增益。