如何更新QAbstractTableModel上的QTableView更改

时间:2017-07-27 19:35:43

标签: python qt qt4 qt5

在使用QTableViewQAbstractTableModel时,有时候QTableView没有更新QAbstractTableModel数据中发生的更改。为了“强制执行”或触发视图更新,我使用了QAbstractTableModel的self.layoutChanged.emit()方法。

虽然它有效但我注意到这种方法可能会导致一些不稳定甚至崩溃。我想知道当QAbstractTableModel发生变化时是否还有另一种更新QTableView的方法?

1 个答案:

答案 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,否则可以更新所有角色。