5

QTableViewを使用してPyQtアプリケーションに表示したいカスタムデータ構造があります。QAbstractTableModelのサブクラスを使用してデータと通信しています。データ構造自体は別のモジュールにあり、PyQtについては何も知りません。

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が更新されていないことであり、解決策はそれらを何らかの方法で手動で更新することです。

これを行うためのより良い方法はありますか?そうでない場合は、どのように更新しますか(できれば、すべてのインデックスの変更を追跡する新しい並べ替え関数を作成する必要はありません)。

4

1 に答える 1

5

custom_sort()関数にバグがありました。それを修正した後、ここで説明したアプローチが機能します。

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()
于 2012-01-25T00:10:50.817 に答える