我正在尝试使用 beginMoveRows/endMoveRows 来使持久性索引保持不变,但有时扩展状态标志/持久性索引会在不应该出现的地方重复。
有很多代码,所以我将完成我认为我告诉机器要做的事情:
有一个方法 sortChildrenOf(item) 可以完成所有的魔法。
- 从 item 中找到 child 并调用 sortChildrenOf 并将每个 child 作为 参数
- 保存旧订单
- quickSort child
- 找出新旧秩序的不同
- 对于每个差异:
- 成为MoveRows
- 应用更改
- endMoveRows
当有 2 个级别时一切正常,但是当我输入“长”数据树时,持久索引会损坏。
树中的数据是从网络更新的,但实际更新是在gui线程中完成的。
我应该按照某种精确的顺序做事吗?我可能忘记继承导致这种情况的某些方法吗?
我已经实现了这些方法: - 数据 - 旗帜 - 获取项目 - 指数 - parent - 设置数据
编辑: 忘了说,我在主 sortChildrenOf 调用之前和之后发出了 layoutAboutToBeChanged 和 emit layoutChanged。
最佳答案
我让它工作了,但没有使用 beginMoveRows 和 endMoveRows。我使用发出 layoutAboutToChange 的旧系统获取持久索引列表,对其进行操作并使用 changePersistentIndexList 将其设置回来,最后发出布局已更改。
由于这是修复,因此我相信 beginMoveRows、endMoveRows 和具有树型数据的持久索引存在一些错误。
询问您是否需要更好的代码示例。
关于c++ - 如何在没有持久索引损坏/重复的情况下使用 beginMoveRows 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945227/