setData 引发退出代码 -1073741819
我有一个继承自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' 或其他任何值来解决了这个问题。