QTreeWidgetItemIterator 遍历QTree
最后更新于:2022-04-02 02:11:11
[TOC]
## 概述
迭代器 QTreeWidgetItemIterator 专门用于遍历树形控件或某个父节点的所有子孙条目
①先序遍历( pre-order traversal ):根节点->左子树->右子树;对于每棵子树内的遍历顺序也一样类推。
以上图为例,先序遍历为:A ->B->D->E -> C->F->G。
对于多叉树,先序遍历规则就是:根节点->第一棵子树->第二棵子树->第三棵子树 等等。
②后序遍历( post-order traversal ):左子树->右子树->根节点;对于每棵子树内的遍历顺序也一样类推。后序遍历时父节点和根节点一定是在后面出现的,所以遍历时打头的是叶子。
以上图为例,后序遍历为:D->E->B -> F->G->C ->A。
对于多叉树,后序遍历规则就是:第一棵子树->第二棵子树->第三棵子树....->根节点。
③中序遍历( in-order traversal ):左子树->根节点->右子树;对于每棵子树内的遍历顺序也一样类推。这种遍历仅对二叉树有意义,二叉树的父节点正好在左右子树中间,但多叉树没有中间的概 念。
以上图为例,中序遍历为:D->B->E ->A ->F->C->G。
④按层遍历( level-order traversal ):第0层->第1层->第2层 ……。这种很直观,比如上面的树就是 A->B->C->D->E->F->G 。
![](https://qtguide.ustclug.org/images/ch08/ch08-03-06.png)
常用函数
```
QTreeWidgetItemIterator(const QTreeWidgetItemIterator & it) // 复制构造函数,构造时新迭代器的当前条目也与 it 的当前条目一样
QTreeWidgetItemIterator(QTreeWidget * widget, IteratorFlags flags = All) // 遍历整个QTreeWidget
QTreeWidgetItemIterator(QTreeWidgetItem * item, IteratorFlags flags = All) // 以某个 QTreeWidgetItem 为根
```
IteratorFlags 参数
|IteratorFlags枚举常量 |数值| 描述|
|---|---|---|
|QTreeWidgetItemIterator::All |0x00000000 | 默认值,枚举所有节点。|
|QTreeWidgetItemIterator::Hidden |0x00000001| 枚举隐藏节点。|
|QTreeWidgetItemIterator::NotHidden |0x00000002| 枚举非隐藏节点。|
|QTreeWidgetItemIterator::Selected |0x00000004| 枚举高亮选中节点。|
|QTreeWidgetItemIterator::Unselected |0x00000008| 枚举未选中节点。|
|QTreeWidgetItemIterator::Selectable |0x00000010| 枚举可以选中的节点。|
|QTreeWidgetItemIterator::NotSelectable |0x00000020| 枚举不可选中的节点。|
|QTreeWidgetItemIterator::DragEnabled |0x00000040| 枚举能够拽出的节点。|
|QTreeWidgetItemIterator::DragDisabled |0x00000080| 枚举不能拽出去的节点。|
|QTreeWidgetItemIterator::DropEnabled |0x00000100| 枚举可接收拖进来的节点。|
|QTreeWidgetItemIterator::DropDisabled |0x00000200| 枚举不能接收拖进来的节点。|
|QTreeWidgetItemIterator::HasChildren |0x00000400| 枚举所有父节点。|
|QTreeWidgetItemIterator::NoChildren |0x00000800| 枚举所有叶子节点。|
|QTreeWidgetItemIterator::Checked |0x00001000| 枚举复选框勾选的节点。|
|QTreeWidgetItemIterator::NotChecked |0x00002000| 枚举复选框没有勾选的节点。|
|QTreeWidgetItemIterator::Enabled |0x00004000| 枚举所有启用的节点。|
|QTreeWidgetItemIterator::Disabled |0x00008000| 枚举所有禁用的节点。|
|QTreeWidgetItemIterator::Editable |0x00010000| 枚举可以编辑的节点。|
|QTreeWidgetItemIterator::NotEditable |0x00020000| 枚举不能编辑的节点。|
|QTreeWidgetItemIterator::UserFlag |0x01000000| 枚举自定义的用户节点。|
## 示例
```
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
if ((*it)->text(0) == itemText)
(*it)->setSelected(true);
++it;
}
```
';