python - 在 PySide QtGui.QStandardItem 中重写 text()

标签 python qt pyside

我有一个类重写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() 函数。

关于python - 在 PySide QtGui.QStandardItem 中重写 text(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28722770/

相关文章:

pyside - 在 Mac 上安装 pyside 时 PySide 构建轮失败

python - 如何将列表保存到 spark 中的文件?

python - 使用键从不同列表中选择实体的唯一组合

c++ - QIcon 未显示在 QPushButton 上

qt - 在 Ubuntu 中使用 QMovie 加载动画 gif 文件

python - QLabel 不会重新绘制像素图

python - QMessageBox 的功能测试...为什么不起作用?

python - 合并 numpy 数组列表并 reshape

python - 无法识别 VS Code Python pip

c++ - 如何将调试信息保存到 qt 中的特定文件中?