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

相关推荐
2601_949847752 小时前
Flutter for OpenHarmony 剧本杀组队App实战:关于我们页面实现
开发语言·javascript·flutter
轩情吖2 小时前
Qt多元素控件之QTableWidget
开发语言·c++·qt·表格·控件·qtablewidget
froginwe112 小时前
PostgreSQL 表达式详解
开发语言
王老师青少年编程2 小时前
信奥赛C++提高组csp-s之状压DP详解及编程实例
c++·动态规划·csp·状压dp·信奥赛·csp-s·提高组
LuminescenceJ2 小时前
RPC通信中的Context上下文如何跨进程传递消息,gRPC为例分析
开发语言·网络·后端·网络协议·rpc·golang
IT陈图图2 小时前
Flutter × OpenHarmony 实战:优雅构建确认对话框的组件化方案
开发语言·javascript·flutter
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony 简易文本末尾字符查看器开发指南
开发语言·javascript·flutter
Lxinccode2 小时前
python(70) : 网页IDE
开发语言·ide·python·网页ide
zmjjdank1ng2 小时前
理解bash和shell
linux·运维·开发语言·bash