簡體   English   中英

在PySide QtGui.QStandardItem中覆蓋text()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM