首页 > 解决方案 > QAbstractItemModel - QModelIndex 对象在创建时是否应该被缓存?

问题描述

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

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

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

标签: c++qtpysideqabstractitemmodelqmodelindex

解决方案


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


推荐阅读