[英]Overriding text() in PySide QtGui.QStandardItem
我有一個類重寫QtGui.QStandardItem的text()方法:
class SourceFileItem(QtGui.QStandardItem):
def __init__(self, name):
super(SourceFileItem, self).__init__("Original Name")
def text(self):
return "Name from Override"
但是,當我將其添加到QStandardItemModel並將其設置為listView的模型時,僅顯示對父類的init方法的調用中的文本,並且根本沒有證據表明我的重寫方法被調用了。
文檔似乎表明這是返回顯示文本的正確方法:
PySide.QtGui.QStandardItem.text()
Return type: unicode
Returns the item’s text. This is the text that’s presented to the user in a view.
這將不起作用,因為QStandardItem.text
不是虛擬函數。
正如您已經發現的那樣,重寫非虛擬函數幾乎沒有用,因為盡管它在Python方面可以正常工作,但在C ++方面卻不可見,因此Qt永遠不會在內部對其進行調用。
但是,在這種特殊情況下,所有內容都不會丟失,因為text()
函數大致等效於此:
def text(self):
return self.data(QtCore.Qt.DisplayRole)
和QStandardItem.data
是虛擬的。
因此,您需要的是這樣的東西:
def data(self, role=QtCore.Qt.UserRole + 1):
if role == QtCore.Qt.DisplayRole:
return 'Name from Override'
return super(SourceFileItem, self).data(role)
現在Qt將從其text()
函數中調用您覆蓋的data()
text()
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.