如何在QAbstractTableModel更改后更新QTableView

3
在使用QTableViewQAbstractTableModel时,有时候会发现QTableView没有更新QAbstractTableModel数据的变化。为了强制触发视图更新,我会使用QAbstractTableModel的self.layoutChanged.emit()方法。虽然这种方法可以达到预期效果,但是我也注意到这种方法可能会导致一些不稳定性和甚至崩溃。我想知道是否有其他方法可以在QAbstractTableModel更改时更新QTableView?

你是指除了插入行/列之外的其他变化吗? - PRMoureu
жІЎй”ҷгҖӮдҫӢеҰӮпјҡж”№еҸҳQAbstractTableModelзҡ„columnCount()ж–№жі•иҝ”еӣһзҡ„еҲ—ж•°дёҚдјҡжӣҙж–°QTableViewгҖӮ - alphanumeric
你是否已经使用 beginInsertRows()endInsertRows()insertRows()?否则,你可以尝试使用 dataChanged 事件。 - PRMoureu
dataChanged的语法是什么?请以示例作为答案发布,这样我们可以给它点赞! - alphanumeric
1个回答

5

基本上,你可以将一个函数连接到模型数据变化的信号/事件上,或者在修改模型时使用的函数中插入此信号,如果您已经实现了这个函数。

第一种选项可能如下所示,在您的模型类中:

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


1
这两种方法都不起作用。dataChanged没有'connect'属性,也不能将emit附加到它上面。 - NL23codes
@NLee23,请你能否提交一个带有你的代码的新问题? - PRMoureu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接