Я пишу простую тестовую программу с использованием 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 с отсортированными узлами, но я не уверен.