【Qt 学习笔记】Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍

文章编号:Qt 学习笔记 / 38

文章目录


一、QTreeWidget介绍

1. 简介

QTreeWidget是Qt中的一个可视化控件,用于显示树形结构的数据。它是QTreeView的衍生类,提供了更直观易用的API来构建和管理树形结构。

QTreeWidget可用于显示和编辑树状结构的数据,每个节点可以包含一个或多个子节点。每个节点以一个图标和一个文本标签来标识,用户可以通过展开或折叠节点来显示或隐藏子节点。

2. 核心方法

方法 说明
clear 清空所有子节点
addTopLevelItem(QTreeWidgetItem* item) 新增顶层节点
topLevelItem(int index) 获取指定下标的顶层节点.
topLevelItemCount() 获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem* item) 查询指定节点是顶层节点中的下标
takeTopLevelItem(int index) 删除指定的顶层节点. 返回 QTreeWidgetItem* 表⽰被删除的元素
currentItem() 获取到当前选中的节点, 返回 QTreeWidgetItem*
setCurrentItem(QTreeWidgetItem* item) 选中指定节点
setExpanded(bool) 展开/关闭节点
setHeaderLabel(const QString& text) 设置 TreeWidget 的 header 名称.

3. 核心信号

信号 说明
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) 元素被折叠时触发

二、QTreeWidgetItem介绍

1. 简介

QTreeWidgetItem是Qt框架中的一个类,用于在树形结构中表示节点。它可以用于创建树状的视图,比如树状菜单、文件浏览器等。

QTreeWidgetItem类提供了一些方法和属性,用于设置节点的文本、图标、状态等。每个节点都可以有子节点,通过添加子节点来构建树的层次结构。节点的层次关系可以通过父节点和子节点的指针来管理。

2. 核心属性

属性 说明
text 持有的文本
textAlignment 文本对齐方式
icon 持有的图表
font 文本字体
hidden 是否隐藏
disabled 是否禁用
expand 是否展开
sizeHint 尺⼨大小
selected 是否选中

3. 核心方法

方法 说明
addChild(QTreeWidgetItem* child) 新增子节点
childCount() 子节点的个数
child(int index) 获取指定下标的子节点. 返回 QTreeWidgetItem*
takeChild(int index) 删除对应下标的子节点
removeChild(QTreeWidgetItem* child) 删除对应的子节点
parent() 获取该元素的父节点

三、QTreeWidget的使用(代码示例)

  1. 在界面TreeView,和三个按钮,以及一个输入框,如下图所示
  2. 使用代码添加顶层元素
cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //修改根节点名称
    ui->treeWidget->setHeaderLabel("饮品");

    //添加顶层元素
    QTreeWidgetItem * item = new QTreeWidgetItem();
    //设置顶层元素的名称
    item->setText(0,"碳酸饮料");
    //添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item);

    //添加顶层元素
    QTreeWidgetItem * item2 = new QTreeWidgetItem();
    //设置顶层元素的名称
    item2->setText(0,"奶茶");
    //添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item2);

    //添加顶层元素
    QTreeWidgetItem * item3 = new QTreeWidgetItem();
    //设置顶层元素的名称
    item3->setText(0,"果汁");
    //添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item3);

    //添加子节点
    QTreeWidgetItem * item4 = new QTreeWidgetItem();
    //设置元素名称
    item4->setText(0,"百事可乐");
    //添加到顶层节点下
    item->addChild(item4);

    //添加子节点
    QTreeWidgetItem * item5 = new QTreeWidgetItem();
    //设置元素名称
    item5->setText(0,"雪碧");
    //添加到顶层节点下
    item->addChild(item5);
}
  1. 编写按钮生成的槽函数
cpp 复制代码
//添加到顶层元素 按钮
void Widget::on_pushButton_insertTopLevelItem_clicked()
{
    //获取到LineEdit输入框中的内容
    const QString& text = ui->lineEdit->text();
    //新增顶层节点
    QTreeWidgetItem * item = new QTreeWidgetItem();
    //设置顶层元素名称
    item -> setText(0,text);
    //添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item);
}

//添加到选中元素 按钮
void Widget::on_pushButton_insertItem_clicked()
{
    //获取到输入框内容
    const QString& text = ui->lineEdit->text();
    //获取当前选中的节点
    QTreeWidgetItem * current= ui->treeWidget->currentItem();
    if(current == nullptr)
    {
        return;
    }
    //新增节点
    QTreeWidgetItem * item = new QTreeWidgetItem();
    //设置元素名称
    item -> setText(0,text);
    //添加到节点中
    current->addChild(item);
}

//删除选中的元素 按钮
void Widget::on_pushButton_3_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);
    }
}
  1. 运行结果,可以针对树形结构进行编辑添加内容和删除内容

相关推荐
ctrey_25 分钟前
2024-11-13 学习人工智能的Day26 sklearn(2)
人工智能·学习·sklearn
杜若南星42 分钟前
保研考研机试攻略(满分篇):第二章——满分之路上(1)
数据结构·c++·经验分享·笔记·考研·算法·贪心算法
Neophyte06081 小时前
C++算法练习-day40——617.合并二叉树
开发语言·c++·算法
慕容复之巅1 小时前
基于MATLAB的条形码的识别图像处理报告
开发语言·图像处理·matlab
zqzgng1 小时前
Python 数据可视化pilot
开发语言·python·信息可视化
写bug的小屁孩1 小时前
websocket初始化
服务器·开发语言·网络·c++·websocket·网络协议·qt creator
Dr_eamboat1 小时前
【Java】枚举类映射
java·开发语言·python
Allen zhu1 小时前
【PowerHarmony】电鸿蒙学习记录-编写helloworld!
学习·华为·harmonyos
代码小鑫1 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____1 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库