在使用QTableView
和QAbstractTableModel
时,有时候QTableView没有更新QAbstractTableModel数据中发生的更改。为了“强制执行”或触发视图更新,我使用了QAbstractTableModel的self.layoutChanged.emit()
方法。
虽然它有效但我注意到这种方法可能会导致一些不稳定甚至崩溃。我想知道当QAbstractTableModel发生变化时是否还有另一种更新QTableView的方法?
答案 0 :(得分:2)
基本上,您可以将函数连接到模型dataChanged信号/事件,或者您可以在用于修改模型的函数中插入此信号(如果已实现)。
第一个选项可能如下所示,在您的模型类中,
self.dataChanged.connect(self.view.refresh)
其中refresh()是视图中的自定义插槽,触发简单self.update()
,否则您需要处理信号发送的参数(受影响的父级QModelIndex)。
第二个选项需要使用QModelIndex发出信号,当你在模型类中应用一些更改时,在函数中调用它:
self.dataChanged.emit(self.index(X, Y), self.index(X, Y))
其中X和Y表示表格中已更改数据的位置
第三个参数 role 是一个选项,即您可以指定DisplayRole
,否则可以更新所有角色。