Qt多元素控件之QTreeWidget
🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:QTreeWidget基本情况;代码演示
⬆⬆⬆⬆上一篇:Qt多元素控件之QTableWidget
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-
1.QTreeWidget基本情况
QTreeWidget它是一个树型控件,它的每个元素都是一个QTreeWidgetItem,每个QTreeWidgetItem都可以包含多个文本或图标,每个图标/文本为一列。但是这里的树型结构和数据结构中学的有一点不一样,它是没有根结点的,是从我们所认为的"根结点"下一层开始的,被称为顶层结点,我们可以给QTreeWidget设置很多个顶层结点,然后再给顶层结点添加子结点,这样就可以构成树型结构
接下来看一下QTreeWidget的相关函数
| 函数声明 | 函数说明 |
|---|---|
| void clear() | 清空所有子结点 |
| void addTopLevelItem(QTreeWidgetItem* item) | 新增顶层结点 |
| QTreeWidgetItem *topLevelItem(int index) const | 获取指定下标的顶层结点 |
| int topLevelItemCount() const | 获取顶层结点的数量 |
| int indexOfTopLevelItem(QTreeWidgetItem *item) const | 获取指定顶层结点的下标 |
| QTreeWidgetItem *takeTopLevelItem(int index) | 删除指定的顶层节点. 返回 QTreeWidgetItem* 表示被删除的元素 |
| QTreeWidgetItem *currentItem() const | 获取到当前选中的节点, 返回 QTreeWidgetItem |
| void setCurrentItem(QTreeWidgetItem* item) | 设置当前选中的结点 |
| void setExpanded(bool) | 展开/关闭节点 |
| void setHeaderLabel(const QString& text) | 设置 TreeWidget 的 header 名称 |
然后是QTreeWidget的信号
| 信号声明 | 信号说明 |
|---|---|
| void currentItemChanged(QTreeWidgetItemcurrent, QTreeWidgetItem old) | 切换选中元素时触发 |
| void itemClicked(QTreeWidgetItem* item, int col) | 点击元素时触发 |
| void itemDoubleClicked(QTreeWidgetItem* item,int col) | 双击元素时触发 |
| void itemEntered(QTreeWidgetItem* item, int col) | ⿏标进⼊时触发 |
| void itemExpanded(QTreeWidgetItem* item) | 元素被展开时触发 |
| void itemCollapsend(QTreeWidgetItem* item) | 元素被折叠时触发 |
这里还需要补充一下QTreeWidgetItem的一些使用函数
| 函数说明 | 函数声明 |
|---|---|
| void addChild(QTreeWidgetItem* child) | 新增子结点 |
| int childCount() const | ⼦节点的个数 |
| QTreeWidgetItem *child(int index) const | 获取指定下标的子结点, 返回 QTreeWidgetItem* |
| void takeChild(int index | 删除对应下标的子节点 |
| void removeChild(QTreeWidgetItem*child) | 删除对应的⼦节点 |
| QTreeWidgetItem *parent() const | 获取该元素的父节点 |
2.代码演示

cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置根结点的标题, 仅用于描述各列数据的含义,不会作为独立的结点存在
ui->treeWidget->setHeaderLabel("动物");
//ui->treeWidget->setColumnCount(2);
//创建顶层结点
QTreeWidgetItem* item1=new QTreeWidgetItem;
//在第一列中进行设置(可以设置不止一列)
item1->setText(0,"狗");
//将顶层结点进行添加
ui->treeWidget->addTopLevelItem(item1);
QTreeWidgetItem* item2=new QTreeWidgetItem;
item2->setText(0,"猫");
ui->treeWidget->addTopLevelItem(item2);
QTreeWidgetItem* item3=new QTreeWidgetItem;
item3->setText(0,"鸟");
item3->setText(1,"乌龟");
ui->treeWidget->addTopLevelItem(item3);
//添加子结点
// 创建子结点
QTreeWidgetItem* child_item1=new QTreeWidgetItem;
//在第一列中进行设置
child_item1->setText(0,"哈士奇");
//child_item1->setText(1,"金毛");
//进行添加子结点
item1->addChild(child_item1);
QTreeWidgetItem* child_item2=new QTreeWidgetItem;
child_item1->setText(0,"金毛");
item1->addChild(child_item2);
QTreeWidgetItem* child_item3=new QTreeWidgetItem;
child_item3->setText(0,"三花");
item2->addChild(child_item3);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_addTop_clicked()
{
//创建新顶层结点
QTreeWidgetItem*topItem=new QTreeWidgetItem;
//获取顶层结点命名
const QString str(ui->lineEdit->text());
//进行设置
topItem->setText(0,str);
//进行添加
ui->treeWidget->addTopLevelItem(topItem);
}
void Widget::on_pushButton_addSelect_clicked()
{
//获取当前选中的结点
QTreeWidgetItem* current=ui->treeWidget->currentItem();
if(current==nullptr)
{
return;
}
//创建新结点
QTreeWidgetItem* item=new QTreeWidgetItem;
//获取文本
const QString str(ui->lineEdit->text());
//对结点进行设置
item->setText(0,str);
//进行设置子结点
current->addChild(item);
}
void Widget::on_pushButton_deleteSelect_clicked()
{
//找到当前结点
QTreeWidgetItem* current=ui->treeWidget->currentItem();
if(current==nullptr)
{
return;
}
//分别对顶层结点和子结点进行处理
QTreeWidgetItem* parent=current->parent();
if(parent==nullptr)
{
//顶层结点
int index=ui->treeWidget->indexOfTopLevelItem(current);
ui->treeWidget->takeTopLevelItem(index);
}
else
{
//子结点
parent->removeChild(current);
}
}

上述这几个控件的相关操作,数据都是保存在内存中的,因此无论在界面上做什么操作,只要重新运行程序,之前的数据就没了
🌸🌸Qt多元素控件之QTreeWidget大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪
