如何在PyQt/PySide中重新实现QListWidgetItem的setData?
当我将如何在PyQt/PySide中重新实现QListWidgetItem的setData?,qt,pyqt,pyqt4,pyside,Qt,Pyqt,Pyqt4,Pyside,当我将QListWidgetItem子类化时,我重新实现了setData,其中我重置了项的文本属性,编辑不会进行,但文本会简单地恢复到编辑器打开之前的状态: class ListItem(QtGui.QListWidgetItem): def __init__(self, text, listWidget): QtGui.QListWidgetItem.__init__(self, text) self.listWidget = listWidget
QListWidgetItem
子类化时,我重新实现了setData
,其中我重置了项的文本属性,编辑不会进行,但文本会简单地恢复到编辑器打开之前的状态:
class ListItem(QtGui.QListWidgetItem):
def __init__(self, text, listWidget):
QtGui.QListWidgetItem.__init__(self, text)
self.listWidget = listWidget
self.string = text
def setData(self, role, value):
if role == QtCore.Qt.EditRole:
print "new value, previous value: ", value, self.string
self.string = value
return True
return False
即使使用这个简单的子类,当我在编辑一个项目后点击return
时,它也会恢复。如果这是QAbstract*Model
,我会发出dataChanged
信号告诉模型/视图数据已经更改,但我认为这在QListWigets中不起作用
我甚至尝试添加self.setText(value)
,但行为是一样的
在我自己设置其他项属性之后,我可以返回基类:
QtGui.QListWidgetItem.setData()
。但是我的目标是自己对文本施加更多的控制,而不仅仅是对基类下注。在调用基类方法时,必须始终将self
作为第一个参数传递(除非使用super
)@ekhumoro谢谢,我对这个问题做了很多修改,因为你的回答表明原来的问题是一个愚蠢的错误。如果你想获得更多的控制权,你需要覆盖data()
以及setData
,并根据需要处理每个角色。对于不希望处理的角色,请改为调用基类方法。还要注意的是,setData
的返回类型是void
,因此没有必要从中返回任何内容。