後でより複雑なプロジェクトのために 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 を適切に再割り当てしていないと思われますが、よくわかりません。