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 回答