Python 在对数据源进行排序后,如何更新QAbstractTableModel和QTableView?
我有一个自定义数据结构,我想使用QTableView在PyQt应用程序中显示它。我正在使用QAbstractTableModel的一个子类与数据通信。数据结构本身位于单独的模块中,对PyQt一无所知 使用QTableView显示和编辑数据是可行的,但现在我想对数据进行排序,然后更新模型和视图 在阅读QAbstractTableModel及其祖先QAbstractItemModel的Qt文档后,我的第一个方法是尝试以下方法:Python 在对数据源进行排序后,如何更新QAbstractTableModel和QTableView?,python,sorting,pyqt,qtableview,qabstractitemmodel,Python,Sorting,Pyqt,Qtableview,Qabstractitemmodel,我有一个自定义数据结构,我想使用QTableView在PyQt应用程序中显示它。我正在使用QAbstractTableModel的一个子类与数据通信。数据结构本身位于单独的模块中,对PyQt一无所知 使用QTableView显示和编辑数据是可行的,但现在我想对数据进行排序,然后更新模型和视图 在阅读QAbstractTableModel及其祖先QAbstractItemModel的Qt文档后,我的第一个方法是尝试以下方法: class MyModel(QtCore.QAbstractTableM
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信号,但这也无法更新视图
我做了进一步的研究。如果我理解正确,问题是模型中的QPersistentModelIndex没有得到更新,解决方法是以某种方式手动更新它们
有更好的方法吗?如果没有,我将如何更新它们(最好不必编写跟踪每个索引更改的新排序函数)?自定义排序()函数中存在错误。在修复它之后,我在这里描述的方法是有效的
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()
您的代码应该可以工作,不必担心这里的持久索引。我编写的模型发出的信号与您的
sort\u函数相同,并正确更新视图。你确定你的函数被调用了吗,custom_sort()
实际上改变了数据,这些改变通过你的模型的data()
方法反映出来了吗?@FerdinandBeyer啊,这就是问题所在!我已经检查了数据是否正在更改,但没有考虑检查data()方法本身。custom_sort()正在复制某些需要进行排序的项目。非常感谢你!没问题。请随意发布您的解决方案作为答案,并接受它,这样这个问题将被标记为已回答!