一、描述
QTreeView 实现了模型中项目的树表示。
构建一个树视图显示模型中的数据很简单。 在以下示例中,目录的内容由
QFileSystemModel
提供并显示为树:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
模型/视图架构确保树视图的内容随着模型的变化而更新。具有子项的项目可以处于展开(子项可见)或折叠(子项隐藏)状态。
键绑定
QTreeView 支持一组键绑定,使用户能够在视图中导航并与项目的内容进行交互:
-
Up
:将光标移动到上一行同一列中的项目。如果当前项的父项没有更多行可导航到,则光标将移动到父项之前的同级项的最后一行中的相关项。 -
Down
:移动光标到下一行同一列中的项目。如果当前项的父项没有更多行可导航到,则光标移动到父项之后的同级项的第一行中的相关项。 -
Left
:通过折叠分支隐藏当前项目(如果存在)的子项。 -
Minus
:与Left相同。 -
Right
:通过扩展分支显示当前项(如果存在)的子项。 -
Plus
:与 Right 相同。 -
Asterisk
(星号):展开当前项目及其所有子项(如果存在)。 -
PageUp
:将光标向上移动一页。 -
PageDown
:将光标向下移动一页。 -
Home
:将光标移动到模型中第一个顶级项目的第一行的同一列中的项目。 -
End
:将光标移动到模型中最后一个顶级项目的最后一行的同一列中的项目。 -
F2
:在可编辑模型中,这将打开当前项目进行编辑。
Escape
键可用于取消编辑过程并恢复对显示数据的任何更改。
提高性能
可以向视图提供有关它正在处理的数据的提示,以便在显示大量项目时提高其性能。对于旨在显示具有相同高度的项目的视图,可以采用的一种方法是将
uniformRowHeights
属性设置为 true。
二、属性成员
1、
allColumnsShowFocus
: bool
项目是否应使用所有列显示键盘焦点。默认值为false。
如果此属性为 true,则所有列都将显示焦点,否则只有一列将显示焦点。
2、
animated
: bool
是否启用动画。默认为 false。如果为true,则树视图将为分支的扩展和折叠设置动画。
3、
autoExpandDelay
: int
在拖放操作期间打开树中的项目之前的延迟时间(毫秒)。默认为 -1,表示禁用延迟。
4、
expandsOnDoubleClick
: bool
是否可以通过双击展开。默认为true。
5、
headerHidden
: bool
是否显示标题。默认为false。
6、
indentation
: int
树视图中项目的缩进。对于顶级项目,缩进指定了从视口边缘到第一列项目的水平距离。对于子项,它指定其父项的缩进。
默认情况下,此属性的值取决于样式。因此,当样式更改时,此属性会随之更新。调用
setIndentation
() 停止更新,调用
resetIndentation
() 将恢复默认行为。
7、
itemsExpandable
: bool
项目是否可由用户展开。默认为 true。
8、
rootIsDecorated
: bool
是否显示用于展开和折叠顶级项目的控件。默认情况下,此属性为 true。
带有子项的项目通常显示有用于展开和折叠它们的控件,从而允许显示或隐藏其子项。如果此属性为 false,可用于使单级树结构看起来像一个简单的项目列表。
9、
sortingEnabled
: bool
此属性保存是否启用排序。默认值为false。
注意:为了避免性能问题,建议在将项目插入树后启用排序。也可以在将项目插入树之前将项目插入到列表中。
10、
uniformRowHeights
: bool
树视图中的所有项目是否具有相同的高度。
高度是从视图中的第一项获得的。当该项的数据发生变化时,它会更新。
11、
wordWrap
: bool
项目文本自动换行策略。如果为true,则项目文本会在必要的断字处换。默认为 false。
三、成员函数
1、void
collapse
(const QModelIndex &index)
折叠索引指定的模型项。
2、void
collapseAll
()
折叠所有展开的项目。
3、[
signal
] void
collapsed
(const QModelIndex &index)
当索引指定的项目折叠时发出此信号。
4、void
expand
(const QModelIndex &index)
展开索引指定的模型项。
5、void
expandAll
()
展开所有可展开的项目。如果模型包含大量项目,此功能将需要一些时间来执行。
6、void
expandRecursively
(const QModelIndex &index, int depth = -1)
将给定索引处的项目及其所有子项扩展到给定深度。深度是相对于给定索引的。 深度为 -1 将扩展所有子项,深度为 0 将仅扩展给定索引。
如果模型包含大量项目,此功能将需要一些时间来执行。
7、void
expandToDepth
(int depth)
将所有可扩展项目扩展到给定深度。
8、[
signal
] void
expanded
(const QModelIndex &index)
当索引指定的项目被扩展时,会发出此信号。
9、void
hideColumn
(int column) / void
showColumn
(int column)
隐藏/显示给定的列。这个函数只能在模型初始化后调用,因为视图需要知道列数才能操作。
10、void
resizeColumnToContents
(int column)
将列的大小调整为其内容的大小。
11、void
sortByColumn
(int column, Qt::
SortOrder
order)
按给定列中的值和顺序对模型进行排序。