无法在 QTreeView 中显示 header

Can't get header to display in QTreeView

我有一个无法看到 header 的 TreeView。在我对 QAbstractItemModel 的 class 定义中,我按如下方式实现 headerData() 函数:

def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
    if role != QtCore.Qt.DisplayRole:
        return '' # empty string since QVariant isn't in PySide
    if orientation == QtCore.Qt.Horizontal:
        return 'TEST'
    return ''

如果我执行 headerData(),header 就会消失。没有它,我只会得到一个带有数字标签(1、2、3 等)的通用水平 header。谁能解释一下这里发生了什么?

根据文档:

PySide.QtCore.QAbstractItemModel.headerData(section, orientation[, role=Qt.DisplayRole])

Parameters:
section – PySide.QtCore.int

orientation – PySide.QtCore.Qt.Orientation

role – PySide.QtCore.int Return type: object

这个returns一个int类型,但是Display作用是QtCore.Qt.ItemDataRole枚举的一部分

为了解决我提出以下代码:

def headerData(self, section, orientation, role=0):
    role =  QtCore.Qt.ItemDataRole(role)
    if role != QtCore.Qt.DisplayRole:
        return None

    if orientation == QtCore.Qt.Horizontal:
        return "Test"
    return None

我设法通过 return 将 None 作为默认 return 值而不是空字符串来解决这个问题。我现在看到了 header,并且正在为 SizeHintRole 之外的所有其他角色打印值。感谢您的帮助!