Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PyQt/PySide中重新实现QListWidgetItem的setData?_Qt_Pyqt_Pyqt4_Pyside - Fatal编程技术网

如何在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
,因此没有必要从中返回任何内容。