我有一个 QStandardItemModel 需要在不同视图中使用不同的水平标题标签。
我无法找到有关如何以这种方式将 QTreeView 的标头与模型分离的信息。这可能吗?
请参阅下面的简单代码示例。
在这个例子中 - 我们有 ItemTypeA,它是我们的顶级项目,它的水平轴代表属性“名称 | 插值 | 标准化”。
ItemTypeA (ItemTypeB) 的子项在水平轴上有代表“名称|乘法”的项目
TreeViewA 显示所有内容,TreeViewB 仅显示所选顶级项的子项(此示例中未实现选择连接)。
from PySide.QtGui import *
from PySide.QtCore import *
class MyModel(QStandardItemModel):
def __init__(self):
super(MyModel, self).__init__()
iroot = self.invisibleRootItem()
self.setHorizontalHeaderLabels(['Name', 'Interpolation', 'Normalize'])
def newTopLevelItem(self, name = 'myTopLevelItem'):
item = ItemTypeA(name)
root_item = self.invisibleRootItem()
root_item.appendRow([item]+item.settingItems())
return item
class ItemTypeA(QStandardItem):
def __init__(self, *args, **kwargs):
super(ItemTypeA, self).__init__(*args, **kwargs)
self.s_interpolation =QStandardItem('0')
self.s_normalize = QStandardItem('False')
def settingItems(self):
return [
self.s_interpolation,
self.s_normalize
]
def newChildItem(self, name = 'newChildItem'):
childItem = ItemTypeB( name )
self.appendRow( [childItem]+childItem.settingItems() )
class ItemTypeB(QStandardItem):
def __init__(self, *args, **kwargs):
super(ItemTypeB, self).__init__(*args, **kwargs)
self.s_multiply = QStandardItem('1.0')
def settingItems(self):
return [
self.s_multiply,
]
class TreeViewA(QTreeView):
'''
THIS VIEW Needs the Headers:
Item Name | Interpolation | Normalize
'''
def __init__(self):
super(TreeViewA, self).__init__()
model = MyModel()
self.setModel(model)
newItem = model.newTopLevelItem()
newItem.newChildItem()
class TreeViewB(QTreeView):
'''
THIS VIEW Needs the Headers:
Item Name | Multiply
'''
def __init__(self, sourceView):
super(TreeViewB, self).__init__()
model = sourceView.model()
self.setModel(model)
self.setRootIndex(model.index(0,0))
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
layout = QHBoxLayout()
viewA = TreeViewA()
viewB = TreeViewB(viewA)
layout.addWidget(viewA)
layout.addWidget(viewB)
self.setLayout(layout)
widget = MyWidget()
widget.show()
想法?