树形QTreeWidget
QTreeWidget
表示一个树形控件,里面的每一个元素,都是一个 QTreeWidgetItem
类型的对象,每个 QTreeWidgetItem
都可以包含多个文本和图标,每个文本或图标为一个列。
需要注意的是, QTreeWidget
向用户屏蔽了根节点,也就是说,QTreeWidget
这颗树的顶层节点都是根节点的子节点,顶层节点可以有很多个。
1. QTreeWidget属性
没啥属性。
2. QTreeWidget信号
信号 | 说明 |
---|---|
currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old) | 切换选中元素时触发。 |
itemClicked(QTreeWidgetItem* item, int col) | 点击元素时触发。 |
itemDoubleClicked(QTreeWidgetItem* item, int col) | 双击元素时触发。 |
itemEntered(QTreeWidgetItem* item,int col) | 鼠标点入时触发。 |
itemExpanded(QTreeWidgetItem* item) | 元素被展开时触发。 |
itemCollapsend(QTreeWidgetItem* item) | 元素被折叠时触发。 |
3. QTreeWidget方法
方法 | 说明 |
---|---|
clear() | 清空所有子节点。 |
addTopLevelItem(QTreeWidgetItem* item) | 新增顶层节点。 |
topLevelItem(int index) | 获取指定下标的顶层节点。 |
topLevelItemCount() | 获取顶层节点个数。 |
indexOfTopLevelItem(QTreeWidgetItem* item) | 查询指定节点是顶层节点中的第几个下标。 |
takeTopLevelItem(int index) | 删除指定的顶层节点,返回 QTreeWidgetItem* 类型表示被删除的元素。 |
currentItem() | 获取到当前选中的节点,返回 QTreeWidgetItem* 类型表示获取到的元素。 |
setCurrentItem(QTreeWidgetItem* item) | 选中指定节点。 |
setExpanded(bool) | 展开/关闭节点。 |
setHeaderLabel(constQString& text) | 设置 TreeWidget 的 header 名称。 |
4. QTreeWidgetItem属性
属性 | 说明 |
---|---|
text | 持有的文本。 |
textAlignment | 文本对齐方式。 |
icon | 持有的图表。 |
font | 文本文字。 |
hidden | 是否隐藏。 |
disabled | 是否禁用。 |
expand | 是否展开。 |
sizeHint | 尺寸大小。 |
selected | 是否选中。 |
5. QTreeWidgetItem方法
方法 | 说明 |
---|---|
addChild(QTreeWidgetItem* child) | 新增子节点。 |
childCount() | 子节点的个数。 |
child(int index) | 获取指定下标的子节点,返回 QTreeWidgetItem* 类型表示返回的元素。 |
takeChild(int index) | 删除对应下标的子节点。 |
removeChild(QTreeWidgetItem* child) | 删除对应的子节点。 |
parent() | 获取该元素的父结点。 |
6. 使用QTreeWidget制作一个分类列表
注意代码中的边界处理逻辑:
#include "widget.h"
#include "ui_widget.h"
#include <QTreeWidget>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_add_clicked()
{QString content=ui->lineEdit->text();if(content.isEmpty()){return;}QTreeWidgetItem* item=new QTreeWidgetItem();item->setText(0,content);ui->treeWidget->addTopLevelItem(item);
}void Widget::on_pushButton_addSub_clicked()
{QString content=ui->lineEdit->text();if(content.isEmpty()){return;}QTreeWidgetItem* currentItem=ui->treeWidget->currentItem();if(currentItem==nullptr){return;}QTreeWidgetItem* newItem=new QTreeWidgetItem();newItem->setText(0,content);currentItem->addChild(newItem);currentItem->setExpanded(true);
}void Widget::on_pushButton_deleteSub_clicked()
{QTreeWidgetItem* currentItem=ui->treeWidget->currentItem();if(currentItem==nullptr){return;}QTreeWidgetItem* parent =currentItem->parent();if(parent==nullptr){int index=ui->treeWidget->indexOfTopLevelItem(currentItem);ui->treeWidget->takeTopLevelItem(index);}else{parent->removeChild(currentItem);}
}