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

相关推荐
我在人间贩卖青春19 分钟前
C++之this指针
c++·this
云姜.22 分钟前
java多态
java·开发语言·c++
CoderCodingNo31 分钟前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
陳103037 分钟前
C++:红黑树
开发语言·c++
一切尽在,你来43 分钟前
C++ 零基础教程 - 第 6 讲 常用运算符教程
开发语言·c++
泉-java44 分钟前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言
weixin_499771551 小时前
C++中的组合模式
开发语言·c++·算法
初级代码游戏1 小时前
套路化编程 C# winform 自适应缩放布局
开发语言·c#·winform·自动布局·自动缩放
_waylau1 小时前
鸿蒙架构师修炼之道-架构师的职责是什么?
开发语言·华为·harmonyos·鸿蒙
2的n次方_1 小时前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构