私はQTableViewを使ってPyQtアプリケーションで表示したいカスタムデータ構造を持っています。私はデータと通信するためにQAbstractTableModelのサブクラスを使用しています。データ構造自体は別のモジュールにあり、PyQtについては何も知らない。データソースのソート後にQAbstractTableModelおよびQTableViewを更新するにはどうすればよいですか?
QTableViewでデータを表示および編集することはできますが、データを並べ替えてモデルとビューを更新したいと考えています。
QAbstractTableModelとその祖先QAbstractItemModelのためのQtのドキュメントを読んだ後、私の最初のアプローチは、これを試してみた:class MyModel(QtCore.QAbstractTableModel):
__init__(self, data_structure):
super().__init__()
self.data_structure = data_structure
# ...
def sort_function(self):
self.layoutAboutToBeChanged.emit()
# custom_sort() is built into the data structure
self.data_structure.custom_sort()
self.layoutChanged.emit()
しかし、これは、ビューを更新するために失敗しました。私はまた、モデルによって使用されているすべてのデータに対してdataChanged信号を出力しようとしましたが、これもビューの更新に失敗しました。
私はさらなる研究を行った。私が正しく理解していれば、モデルのQPersistentModelIndexesが更新されていないという問題があり、その解決方法は何とか手動で更新することになります。
これを行うより良い方法はありますか?もしそうでなければ、どうすればそれらを更新するのでしょうか(できれば、すべてのインデックス変更を追跡する新しいソート関数を書く必要はありません)。
ここでは、永続的なインデックスについて心配する必要はありません。私はあなたの 'sort_function'と同じシグナルを出し、ビューを正しく更新するモデルを書いています。 'custom_sort()'が実際にデータを変更し、その変更がモデルの 'data()'メソッドに反映されているのでしょうか? –
@FerdinandBeyerああ、それは問題でした!私はすでにデータが変更されていることを確認したが、data()メソッド自体をチェックするとは思わなかった。 custom_sort()は、ソートが必要な場所でいくつかの項目をコピーしていました。どうもありがとうございました! –
問題ありません。あなたの解決策を回答として投稿し、それを受け入れるようにしてください。そうすれば、この質問に答えが記されます! –