2024-09-27 21:33:25 发布
网友
在使用QTableView和QAbstractTableModel时,QTableView有时不会随QAbstractTableModel数据中发生的更改而更新。为了“强制”或触发视图更新,我使用QAbstractTableModel的self.layoutChanged.emit()方法。在
QTableView
QAbstractTableModel
self.layoutChanged.emit()
当它工作时,我注意到这种方法可能会导致一些不稳定甚至崩溃。我想知道,当QAbstractTableModel更改时,是否有其他方法可以更新QTableView?在
基本上,可以将函数连接到模型dataChanged signal/event,也可以将此信号插入用于修改模型的函数(如果已实现)。在
第一个选项可能如下所示,在您的模型类中
self.dataChanged.connect(self.view.refresh)
其中refresh()是视图中的一个自定义槽,它触发一个简单的self.update(),否则您需要处理信号发送的参数(受影响的父级QModelIndex)。在
self.update()
第二个选项需要用QModelIndex发出信号,当您在model类中应用一些更改时,请在函数中调用此选项:
其中X和Y表示表中更改数据的位置
第三个参数role是一个选项,即您可以指定DisplayRole,否则可以更新所有角色。在
DisplayRole
基本上,可以将函数连接到模型dataChanged signal/event,也可以将此信号插入用于修改模型的函数(如果已实现)。在
第一个选项可能如下所示,在您的模型类中
其中refresh()是视图中的一个自定义槽,它触发一个简单的
self.update()
,否则您需要处理信号发送的参数(受影响的父级QModelIndex)。在第二个选项需要用QModelIndex发出信号,当您在model类中应用一些更改时,请在函数中调用此选项:
^{pr2}$其中X和Y表示表中更改数据的位置
第三个参数role是一个选项,即您可以指定
DisplayRole
,否则可以更新所有角色。在相关问题 更多 >
编程相关推荐