我有一个QStandardItemModel,在不同的视图中需要不同的水平标题标签。
我无法找到有关如何以这种方式将QTreeView的标头与模型分离的信息。这可能吗?
请参阅下面的简单代码示例。
在这个例子中 - 我们有ItemTypeA,它是我们的顶级项目,它的横轴表示属性" Name | Interpolaton |正常化&#34 ;.
ItemTypeA(ItemTypeB)的子项在横轴上包含表示" Name |的项目乘"
TreeViewA显示所有内容,TreeViewB仅显示所选顶级项目的子项(此示例中未实现选择连接)。
{{ dateForSomething | date('theFormatIWant', false) }}
思想?
答案 0 :(得分:2)
这些情况的解决方案是使用QIdentityProxyModel,但PySide和PySide中不存在此类,因此我们必须使用类似的类,如QSortFilterProxyModel,并覆盖headerData方法。
...
class HeaderProxyModel(QSortFilterProxyModel):
def __init__(self, *args, **kwargs):
QSortFilterProxyModel.__init__(self, *args, **kwargs)
self.labels = []
def setHeaderLabels(self, labels):
self.labels = labels
def headerData(self, section,orientation, role = Qt.DisplayRole):
if orientation == Qt.Horizontal and 0 <= section < self.columnCount() and role==Qt.DisplayRole and section < len(self.labels) :
return self.labels[section]
return QSortFilterProxyModel.headerData(self, section, orientation, role)
class TreeViewB(QTreeView):
'''
THIS VIEW Needs the Headers:
Item Name | Multiply
'''
def __init__(self, sourceView):
super(TreeViewB, self).__init__()
model = sourceView.model()
proxy = HeaderProxyModel()
proxy.setSourceModel(model)
proxy.setHeaderLabels(["Name", "Multiply"])
self.setModel(proxy)
self.setRootIndex(proxy.index(0,0))
...