c++ - QAbstractItemModel - QModelIndex 对象在创建时是否应该被缓存?
问题描述
当子类化 aQAbstractItemModel
并重新实现该index()
方法时,我每次都只是简单地返回一个新索引createIndex()
。但我注意到,index()
当模型与视图结合使用时,该方法会被调用数千次,用于各种绘制事件等等。
我是否应该QModelIndex
在第一次生成对象后缓存该对象index()
,然后在index()
随后在同一行/列上调用时返回缓存的索引?文档中没有提到,似乎索引本身在某些情况下可能会失效,所以我不确定在这里做什么。
在我的特殊情况下,我正在使用 Pyside6,但我认为这可能适用于 Qt 框架的任何实现。
解决方案
如果您的模型支持插入或删除行,则您的索引不是持久的。您仍然可以使用缓存,但每次模型形状更改时都必须使其无效。如果创建索引逻辑很复杂,那么缓存可能会有好处。大小QModelIndex
约为四个整数(行、列和指针/id 和指针),因此它相对轻量级,创建和移动它很便宜。无论哪种方式,只有一种方法可以确定:尝试缓存并测量性能增益。
推荐阅读
- reactjs - Docker OSX - 复制失败:没有这样的文件或目录
- c++ - 更改 win32 控制台应用程序的任务管理器标题
- sed - 使用 sed 删除模式前的空行
- angular - 在 Angular 2 的 Nebular 的 NbTabset 中运行事件
- flutter - 如何使用 utm 参数跟踪应用程序内的事件以链接到存储?
- sql - 使用链接表的组值 (MIN) 的结果更新列值
- javascript - 有没有办法不从 v-for 内的按钮中移除焦点?
- amazon-web-services - AWS OpenVPN 实例无法通过 ssh 连接到其他连接到 Web 的 ec2 实例
- sql-server - 两个“相同”的数据库:一个报告“外键可能导致循环或多个级联路径”,而应用程序启动一个没有
- reactjs - 在 Microsoft Graph Toolkit 中使用不同的配置文件图像大小