问题描述
在子类化 qabstractitemmodel
并重新实现 index()
方法时,我每次都使用 createIndex()
简单地返回一个新索引。但我注意到,当模型与视图结合使用时,index()
方法会被调用数千次,用于各种绘制事件等。
我是否应该在 QModelIndex
中第一次生成后缓存 index()
对象,然后在随后在同一行上调用 index()
时返回缓存的索引/科尔?文档中没有提到它,而且索引本身似乎在某些情况下会失效,所以我不确定在这里做什么。
在我的特殊情况下,我正在使用 Pyside6,但我认为这适用于 Qt 框架的任何实现。
解决方法
如果您的模型支持插入或删除行,则您的索引不是持久的。您仍然可以使用缓存,但每次模型形状更改时都必须使缓存无效。
如果创建索引逻辑很复杂,缓存可能会有好处。
QModelIndex
的大小大约是四个整数(行、列和指针/id 和指针),因此它相对轻量级,创建和移动它的成本很低。
无论哪种方式,只有一种方法可以确定:尝试缓存并测量性能增益。