setData 引发退出代码 -1073741819

0 投票
1 回答
789 浏览
提问于 2025-04-18 05:16

我有一个继承自QtGui.QStandardItemModel的子类,里面有一个叫setData的方法,内容如下:

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这个方法里,我把“旧”的值替换成“新”的值,更新到数据库里,然后用返回的值来调用setData。最后,我刷新模型以显示结果,像这样:

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

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

    self.tableUpdate() # refresh/redraw the table

但是我遇到了一个错误,代码是-1073741819,这个错误只在我一个接一个地执行这些操作时出现。如果我不刷新模型(也就是注释掉self.tableUpdate()),而是做其他事情,比如添加一个新项目或者切换标签页,这个错误就不会出现。你知道这是为什么吗?

1 个回答

0

哦,我明白了。

我原以为这个过程会是这样的:

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

但实际上它是这样做的:

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

因为 setItem 在寻找一个已经不存在的索引项(因为它已经被更新了),所以程序崩溃了。

我通过把 setData 的返回值改成 'True' 或其他任何值来解决了这个问题。

撰写回答