我有一个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中,我选择了' old'价值并将其替换为' new'在数据库中,然后我用返回值setData。最后我刷新模型以显示结果。像这样:
def changeItem(self,old,new,index):
dosomethin(old,newindex) # adjust the database and model
self.tableUpdate() # refresh/redraw the table
但是我要退出-1073741819,但前提是我一个接一个地做。如果我不刷新模型(注释掉self.tableUpdate()),而是执行其他可以正常刷新它的东西(比如添加新项目或更改标签),它不会提高错误。知道为什么会这样吗?
答案 0 :(得分:0)
哦想通了。
我认为这个过程会像:
model.itemChanged.signal -> databaseUpdate() -> setItem() -> tableUpdate()
但它正在做:
model.itemChanged.signal -> databaseUpdate() -> tableUpdate() -> setItem()
由于setItem正在寻找一个不再存在的索引项(因为它已经更新),它崩溃了。
通过将setData返回更改为' True'或其他任何内容来修复此问题。