我是model view的新手,一边跟着这个教程,一边查看文档,然后我发现了一个小细节:在QAbstractItemModel类(这里是QAbstractListModel)中,可以下载这里的教程代码,其中setData方法的代码如下:
def setData(self, index, value, role = QtCore.Qt.EditRole):
if role == QtCore.Qt.EditRole:
row = index.row()
color = QtGui.QColor(value)
if color.isValid():
self.__colors[row] = color
self.dataChanged.emit(index, index)
return True
return False
根据教程中的解释和我从文档中理解的内容,如果该函数返回True,则视图会得到更新;如果返回False,则不会发生任何操作。但是当我将代码更改为:
def setData(self, index, value, role = QtCore.Qt.EditRole):
if role == QtCore.Qt.EditRole:
row = index.row()
color = QtGui.QColor(value)
if color.isValid():
self.__colors[row] = color
self.dataChanged.emit(index, index)
return False # This is what I changed in the code
return False
我发现即使函数返回False,如果颜色有效,视图仍然会得到更新。我是否误解了setData方法中的返回角色,或者这是一个bug?
供参考,我使用的是PySide 1.2.1,而不是PyQt4。