如何在 QTreeView 中只显示部分模型?
How to show only part of model in QTreeView?
我一直在研究 this 代码,但我不明白如何调整模型列的可见性。
for i in range(3):
parent1 = QStandardItem('Family {}. Some long status text for sp'.format(i))
for j in range(3):
child1 = QStandardItem('Child {}'.format(i*3+j))
child2 = QStandardItem('row: {}, col: {}'.format(i, j+1))
child3 = QStandardItem('row: {}, col: {}'.format(i, j+2))
parent1.appendRow([child1, child2, child3])
model.appendRow(parent1)
# span container columns
view.setFirstColumnSpanned(i, view.rootIndex(), True)
我想要一个包含多个字段和多个视图的模型,每个视图仅显示特定的列。
我不想使用 setColumnHidden
隐藏列,因为当模型扩展时,我将不得不隐藏新列。
我熟悉 Gtk,它在那里非常简单:您创建一个 TreeView
,手动添加列,用渲染器填充它们并告诉每个渲染器,它应该从模型中的哪一列获取数据。 Qt 可以吗?
您可以使用 QSortFilterProxyModel:
class FilterColumnModel(QSortFilterProxyModel):
def __init__(self, parent=None):
super(FilterColumnModel, self).__init__(parent)
self._columns = None
@property
def columns(self):
return self._columns
@columns.setter
def columns(self, columns):
self._columns = columns[:]
self.invalidateFilter()
def filterAcceptsColumn(self, source_column, source_parent):
if self.columns is None:
return True
return source_column in self.columns
filter_model = FilterColumnModel()
filter_model.setSourceModel(model)
filter_model.columns = [0, 2]
view.setModel(filter_model)
view.setUniformRowHeights(True)
我一直在研究 this 代码,但我不明白如何调整模型列的可见性。
for i in range(3):
parent1 = QStandardItem('Family {}. Some long status text for sp'.format(i))
for j in range(3):
child1 = QStandardItem('Child {}'.format(i*3+j))
child2 = QStandardItem('row: {}, col: {}'.format(i, j+1))
child3 = QStandardItem('row: {}, col: {}'.format(i, j+2))
parent1.appendRow([child1, child2, child3])
model.appendRow(parent1)
# span container columns
view.setFirstColumnSpanned(i, view.rootIndex(), True)
我想要一个包含多个字段和多个视图的模型,每个视图仅显示特定的列。
我不想使用 setColumnHidden
隐藏列,因为当模型扩展时,我将不得不隐藏新列。
我熟悉 Gtk,它在那里非常简单:您创建一个 TreeView
,手动添加列,用渲染器填充它们并告诉每个渲染器,它应该从模型中的哪一列获取数据。 Qt 可以吗?
您可以使用 QSortFilterProxyModel:
class FilterColumnModel(QSortFilterProxyModel):
def __init__(self, parent=None):
super(FilterColumnModel, self).__init__(parent)
self._columns = None
@property
def columns(self):
return self._columns
@columns.setter
def columns(self, columns):
self._columns = columns[:]
self.invalidateFilter()
def filterAcceptsColumn(self, source_column, source_parent):
if self.columns is None:
return True
return source_column in self.columns
filter_model = FilterColumnModel()
filter_model.setSourceModel(model)
filter_model.columns = [0, 2]
view.setModel(filter_model)
view.setUniformRowHeights(True)