我正在为稍后更复杂的项目编写一个使用 QTreeModel 和 QTreeView 的简单测试程序。在这个简单的程序中,我有分组数据,可以收缩或扩展,正如人们在 QTreeView 中所期望的那样。数据也可以按各种数据列排序(QTreeView.setSortingEnabled 为 True)。每个树项都是一个数据列表,所以TreeModel类中实现的排序函数使用了python内置的列表排序:
self.layoutAboutToBeChanged.emit()
self.rootItem.childItems.sort(key=lambda x: x.itemData[col], reverse=order)
for item in self.rootItem.childItems:
item.childItems.sort(key=lambda x: x.itemData[col], reverse=order)
self.layoutChanged.emit()
问题是,每当我更改根的子项的排序时(树只有 2 级深,所以这是唯一的子级),节点不一定像以前那样扩展。如果我在不展开或折叠任何内容的情况下更改排序,则节点会像排序更改之前一样展开。
谁能向我解释我做错了什么?我怀疑这是没有用排序节点正确重新分配 QModelIndex 的问题,但我不确定。