在使用QTableView和QAbstractTableModel时,有时QTableView不会随着QAbstractTableModel的数据中发生的更改而更新。为了“执行”或触发视图更新,我使用了QAbstractTableModel的self.layoutChanged.emit()方法。
虽然它工作,但我注意到这种方法可能会导致一些不稳定,甚至崩溃。我想知道是否有其他方法可以在QAbstractTableModel发生变化时更新QTableView?
发布于 2017-07-28 05:01:10
基本上,您可以将一个函数连接到模型dataChanged信号/事件,或者您可以将此信号插入用于修改模型的函数中(如果您已经实现了一个函数)。
第一个选项可能如下所示,在您的模型类中,
self.dataChanged.connect(self.view.refresh) 其中self.update() ()是视图中的自定义插槽,它触发一个简单的刷新,否则您需要处理由信号发送的参数(受影响的父QModelIndex)。
第二个选项需要使用QModelIndex发出信号,当您在模型类中应用一些更改时,请在函数中调用此函数:
self.dataChanged.emit(self.index(X, Y), self.index(X, Y)) 其中X和Y表示表中已更改数据的位置
第三个参数角色是一个选项,即可以指定DisplayRole,否则所有角色都可以更新。
https://stackoverflow.com/questions/45359569
复制相似问题