c++ - 如何在没有持久索引损坏/重复的情况下使用 beginMoveRows 进行排序?

标签 c++ qt qt4 qtgui

我正在尝试使用 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/

相关文章:

c++ - Qt信号槽visual studio : doesn't seem to be connected

Qt4:缩放不变的 qgraphicsitem 轮廓

Qt4:将 QMainWindow 实例放置在其他 QWidget/QMainWindow 中

c++ - 如何覆盖在 C++ 函数内部的另一个类中定义的虚方法

C++:调用模板类的非模板函数

c++ - SFML 白色矩形

c++ - 如何客观评价一段C++代码片段的执行时间?

python - Python 中的静态链接和动态链接分别是什么意思?

c++ - QLinkedList size() 函数

c++ - 从 QT 中的自定义小部件插件公开子控件