Provides a tree view to display data from a QAbstractItemModel . 更多...
| import 语句: | import QtQuick | 
| Since: | Qt 6.3 | 
| 继承: | TableView | 
A TreeView has a model that defines the data to be displayed, and a delegate that defines how the data should be displayed.
TreeView inherits TableView . This means that even if the model has a parent-child tree structure, TreeView is internally using a proxy model that converts that structure into a flat table model that can be rendered by TableView . Each node in the tree ends up occupying one row in the table, where the first column renders the tree itself. By indenting each delegate item in that column according to its parent-child depth in the model, it will end up looking like a tree, even if it's technically still just a flat list of items.
To allow for maximum flexibility, TreeView itself will not position the delegate items into a tree structure. This burden is placed on the delegate. Qt Quick Controls offers a ready-made TreeViewDelegate that can be used for this, which has the advantage that it works out-of-the-box and renders a tree which follows the style of the platform where the application runs.
Even if TreeViewDelegate is customizable, there might be situations where you want to render the tree in a different way, or ensure that the delegate ends up as minimal as possible, perhaps for performance reasons. Creating your own delegate from scratch is easy, since TreeView offers a set of properties that can be used to position and render each node in the tree correctly.
An example of a custom delegate is shown below:
import QtQuick Window { width: 600 height: 400 visible: true TreeView { anchors.fill: parent // The model needs to be a QAbstractItemModel // model: yourTreeModel delegate: Item { id: treeDelegate implicitWidth: padding + label.x + label.implicitWidth + padding implicitHeight: label.implicitHeight * 1.5 readonly property real indent: 20 readonly property real padding: 5 // Assigned to by TreeView: required property TreeView treeView required property bool isTreeNode required property bool expanded required property int hasChildren required property int depth TapHandler { onTapped: treeView.toggleExpanded(row) } Text { id: indicator visible: treeDelegate.isTreeNode && treeDelegate.hasChildren x: padding + (treeDelegate.depth * treeDelegate.indent) anchors.verticalCenter: label.verticalCenter text: "▸" rotation: treeDelegate.expanded ? 90 : 0 } Text { id: label x: padding + (treeDelegate.isTreeNode ? (treeDelegate.depth + 1) * treeDelegate.indent : 0) width: treeDelegate.width - treeDelegate.padding - x clip: true text: model.display } } } }
						The properties that are marked as
						
required
						
						will be filled in by TreeView, and are similar to attached properties. By marking them as required, the delegate indirectly informs TreeView that it should take responsibility for assigning them values. The following required properties can be added to a delegate:
					
required property TreeView treeView
							
							- Points to the TreeView that contains the delegate item.
						
required property bool isTreeNode
							
							- Is
							
true
							
							if the delegate item represents a node in the tree. Only one column in the view will be used to draw the tree, and therefore, only delegate items in that column will have this property set to
							
true
							
							. A node in the tree should typically be indented according to its
							
depth
							
							, and show an indicator if
							
hasChildren
							
							is
							
true
							
							. Delegate items in other columns will have this property set to
							
false
							
							, and will show data from the remaining columns in the model (and typically not be indented).
						
required property bool expanded
							
							- Is
							
true
							
							if the model item drawn by the delegate is expanded in the view.
						
required property bool hasChildren
							
							- Is
							
true
							
							if the model item drawn by the delegate has children in the model.
						
required property int depth
							
							- Contains the depth of the model item drawn by the delegate. The depth of a model item is the same as the number of ancestors it has in the model.
						另请参阅 Required Properties .
						By default, TreeView
						
							toggles
						
						the expanded state of a row when you double tap on it. Since this is in conflict with double tapping to edit a cell, TreeView sets
						
							editTriggers
						
						to
						
TableView.EditKeyPressed
						
						by default (which is different from
						
							TableView
						
						, which uses
						
TableView.EditKeyPressed | TableView.DoubleTapped
						
						. If you change
						
							editTriggers
						
						to also contain
						
TableView.DoubleTapped
						
						, toggling the expanded state with a double tap will be disabled.
					
注意: A TreeView only accepts a model that inherits QAbstractItemModel .
| collapsed ( row , recursively ) | 
							This signal is emitted when a
							row
							is collapsed in the view.
							row
							will be equal to the argument given to the call that caused the collapse to happen (
							
								collapse
							
							() 或
							
								collapseRecursively
							
							()). If the row was collapsed recursively,
							recursively
							将是
							
true
							
							.
						
注意: when a row is collapsed recursively, the collapsed signal will only be emitted for that one row, and not for its descendants.
							
								注意:
							
							相应处理程序是
							
onCollapsed
							
							.
						
另请参阅 expanded (), expand (), collapse (),和 toggleExpanded ().
| expanded ( row , depth ) | 
								This signal is emitted when a
								row
								is expanded in the view.
								row
								and
								depth
								will be equal to the arguments given to the call that caused the expansion to happen (
								
									expand
								
								() 或
								
									expandRecursively
								
								()). In case of
								
									expand
								
								(),
								depth
								will always be
								
1
								
								. In case of
								
									expandToIndex
								
								(),
								depth
								will be the depth of the target index.
							
注意: when a row is expanded recursively, the expanded signal will only be emitted for that one row, and not for its descendants.
								
									注意:
								
								相应处理程序是
								
onExpanded
								
								.
							
另请参阅 collapsed (), expand (), collapse (),和 toggleExpanded ().
| collapse ( row ) | 
Collapses the tree node at the given row in the view.
row should be the row in the view (table row), and not a row in the model.
注意: this function will not affect the model, only the visual representation in the view.
另请参阅 expand () 和 isExpanded ().
| 
												 | 
Collapses the tree node at the given row in the view recursively down to all leaves.
										For a model has more than one root, you can also call this function with
										row
										等于
										
-1
										
										. This will collapse all roots. Hence, calling collapseRecursively(-1), or simply collapseRecursively(), will collapse all nodes in the model.
									
row should be the row in the view (table row), and not a row in the model.
注意: this function will not affect the model, only the visual representation in the view.
This method was introduced in Qt 6.4.
另请参阅 expandRecursively (), expand (), collapse (), isExpanded (),和 depth ().
| int depth ( row ) | 
Returns the depth (the number of parents up to the root) of the given row .
											row
											should be the row in the view (table row), and not a row in the model. If
											row
											is not between
											
0
											
											and
											
												rows
											
											, the return value will be
											
-1
											
											.
										
另请参阅 modelIndex ().
| expand ( row ) | 
Expands the tree node at the given row in the view.
row should be the row in the view (table row), and not a row in the model.
注意: this function will not affect the model, only the visual representation in the view.
另请参阅 collapse (), isExpanded (),和 expandRecursively ().
| 
															 | 
													Expands the tree node at the given
													row
													in the view recursively down to
													depth
													.
													depth
													should be relative to the depth of
													row
													。若
													depth
													is
													
-1
													
													, the tree will be expanded all the way down to all leaves.
												
													For a model that has more than one root, you can also call this function with
													row
													等于
													
-1
													
													. This will expand all roots. Hence, calling expandRecursively(-1, -1), or simply expandRecursively(), will expand all nodes in the model.
												
row should be the row in the view (table row), and not a row in the model.
注意: This function will not try to fetch more data.
注意: This function will not affect the model, only the visual representation in the view.
警告: If the model contains a large number of items, this function will take some time to execute.
This method was introduced in Qt 6.4.
另请参阅 collapseRecursively (), expand (), collapse (), isExpanded (),和 depth ().
| 
																 | 
Expands the tree from the given model index , and recursively all the way up to the root. The result will be that the delegate item that represents index becomes visible in the view (unless it ends up outside the viewport). To ensure that the row ends up visible in the viewport, you can do:
expandToIndex(index) forceLayout() positionViewAtRow(rowAtIndex(index), Qt.AlignVCenter)
This method was introduced in Qt 6.4.
另请参阅 expand () 和 expandRecursively ().
| bool isExpanded ( row ) | 
Returns if the given row in the view is shown as expanded.
															row
															should be the row in the view (table row), and not a row in the model. If
															row
															is not between
															
0
															
															and
															
																rows
															
															, the return value will be
															
false
															
															.
														
| toggleExpanded ( row ) | 
Toggles if the tree node at the given row should be expanded. This is a convenience for doing:
if (isExpanded(row)) collapse(row) else expand(row)
row should be the row in the view (table row), and not a row in the model.