Qt多元素控件之QTreeWidget

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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
名字还没想好☜5 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王6 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..8 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光9 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光9 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人10 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
hansang_IR10 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘10 小时前
day7.c++继承
c++
在世修行11 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
沫璃染墨11 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++