2017-06-30 34 views
1

我有一个TreeView,我无法看到标题。在我的类定义化QAbstractItemModel,我实现headerData()函数如下:无法获取标题显示在QTreeView(PySide)

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(),头根本消失。没有它,我只是得到一个带数字标签的通用水平标题(1,2,3等)。任何人都可以解释这里发生了什么?

回答

0

根据文档:

PySide.QtCore.QAbstractItemModel.headerData(部分取向[, 角色= Qt.DisplayRole])

参数:
- PySide.QtCore.int

orientation - PySid e.QtCore.Qt.Orientation

作用 - PySide.QtCore.int 返回类型:对象

这将返回一个int型,但显示的角色是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 

enter image description here

+0

这很有道理,但不幸的是我还没有看到标题。我尝试在该函数内打印'ItemDataRole',看起来'DisplayRole'甚至没有被使用......它都是'SizeHintRole'。树视图中的其他所有内容仍然正常显示。 – toadstorm

+0

您可以通过驱动器,保管箱或类似软件共享您的完整代码,以便进行测试。 – eyllanesc

+0

我不能发布我的确切代码,但我基于我的代码是从[这里](http://kylemr.blogspot.com/2013/04/pyqt-drag-and-drop-outliner-like的.html)。它旨在用于Maya,但数据可以用任何东西替换。我所做的只是将实现从PyQt更改为PySide,通过省略QVariants并更改您之前建议的代码。 – toadstorm

0

我设法通过返回None作为默认返回值而不是空字符串来解决此问题。我现在看到了标题,还为SizeHintRole以外的所有其他角色获取了值。感谢您的帮助!