我是模型视图的新手,我在阅读本教程的同时检查了文档,却偶然发现了这个小细节:可以在此处下载的教程代码位于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
我意识到即使color.isValid()函数返回False,视图仍然会更新。我是不是误解了setData方法中的return角色,还是一个错误?
作为参考,我使用的是PySide 1.2.1,而不是PyQt4。
引用视频教程中有关以下内容的信息setData
:
...如果操作成功,此函数需要返回true,否则视图将不会更新。
严格来说,这个说法是错误的。QAbstractItemModel的文档只说setData
如果数据设置成功,则返回true,否则返回false;否则,返回false。它没有提及这样做的后果。具体来说,它没有提及有关更新视图的任何内容。
查看Qt源代码,setData
确实在几个地方检查了返回值,其中一些检查有时可以帮助触发更新。但是实际上有很多事情可以触发更新,因此,返回值setData
对于更新项目并不是必不可少的。
说setData
应该返回true可能更准确,否则(在某些情况下)视图可能不会更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句