0

我有一个带有 setData 的 QtGui.QStandardItemModel 的子类,如下所示:

def setData(self, index, value, role):
    if role == QtCore.Qt.EditRole:
        old = self.itemFromIndex(index).text()
        new = value
        MAIN.changeItem(old,new,index)
    return QtGui.QStandardItemModel.setData(self, index, value, role)

在 MAIN.changeItem 中,我取“旧”值并将其替换为数据库中的“新”值,然后使用返回值设置数据。最后我刷新模型以显示结果。像这样:

def changeItem(self,old,new,index):

    dosomethin(old,newindex) # adjust the database and model

    self.tableUpdate() # refresh/redraw the table

但是我要退出-1073741819,但前提是我一个接一个地执行它们。如果我不刷新模型(注释掉 self.tableUpdate()),而是执行其他可以正常刷新它的操作(例如添加新项目或更改选项卡),则不会引发错误。知道为什么会这样吗?

4

1 回答 1

0

哦,想通了。

我认为这个过程会是这样的:

model.itemChanged.signal -> databaseUpdate() -> setItem() -> tableUpdate()

但相反,它正在做:

model.itemChanged.signal -> databaseUpdate() -> tableUpdate() -> setItem()

而且由于 setItem 正在寻找一个不再存在的索引项(因为它已更新),所以它崩溃了。

通过将 setData 返回更改为“True”或其他任何内容来修复它。

于 2014-05-04T01:00:55.450 回答