如何在 QAbstractTableModel Change 上更新 QTableView
How to update QTableView on QAbstractTableModel Change
在使用 QTableView
和 QAbstractTableModel
时,有时 QTableView 不会随着 QAbstractTableModel 数据中发生的更改而更新。为了 "enforce" 或触发视图更新,我使用 QAbstractTableModel 的 self.layoutChanged.emit()
方法。
虽然它有效,但我注意到此方法可能会导致一些不稳定甚至崩溃。我想知道当 QAbstractTableModel 发生变化时是否有其他方法可以更新 QTableView?
基本上,您可以将一个函数连接到模型 dataChanged signal/event,或者您可以将此信号插入到用于修改模型的函数中(如果您已实现)。
第一个选项可能如下所示,在您的模型中 class、
self.dataChanged.connect(self.view.refresh)
其中 refresh() 是您视图中的自定义插槽,它触发一个简单的 self.update()
,否则您需要处理信号发送的参数(影响父 QModelIndex)。
第二个选项需要使用 QModelIndex 发出信号,当您在模型中应用一些更改时在函数中调用它 class :
self.dataChanged.emit(self.index(X, Y), self.index(X, Y))
其中 X 和 Y 代表更改数据在您的 table
中的位置
第三个参数role是一个选项,即可以指定DisplayRole
,否则可以更新所有角色。
在使用 QTableView
和 QAbstractTableModel
时,有时 QTableView 不会随着 QAbstractTableModel 数据中发生的更改而更新。为了 "enforce" 或触发视图更新,我使用 QAbstractTableModel 的 self.layoutChanged.emit()
方法。
虽然它有效,但我注意到此方法可能会导致一些不稳定甚至崩溃。我想知道当 QAbstractTableModel 发生变化时是否有其他方法可以更新 QTableView?
基本上,您可以将一个函数连接到模型 dataChanged signal/event,或者您可以将此信号插入到用于修改模型的函数中(如果您已实现)。
第一个选项可能如下所示,在您的模型中 class、
self.dataChanged.connect(self.view.refresh)
其中 refresh() 是您视图中的自定义插槽,它触发一个简单的 self.update()
,否则您需要处理信号发送的参数(影响父 QModelIndex)。
第二个选项需要使用 QModelIndex 发出信号,当您在模型中应用一些更改时在函数中调用它 class :
self.dataChanged.emit(self.index(X, Y), self.index(X, Y))
其中 X 和 Y 代表更改数据在您的 table
中的位置第三个参数role是一个选项,即可以指定DisplayRole
,否则可以更新所有角色。