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

news2024/12/25 9:15:38

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

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

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

文章目录

  • Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍
    • 一、QTreeWidget介绍
      • 1. 简介
      • 2. 核心方法
      • 3. 核心信号
    • 二、QTreeWidgetItem介绍
      • 1. 简介
      • 2. 核心属性
      • 3. 核心方法
    • 三、QTreeWidget的使用(代码示例)


一、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. 使用代码添加顶层元素
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. 编写按钮生成的槽函数
//添加到顶层元素 按钮
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. 运行结果,可以针对树形结构进行编辑添加内容和删除内容
    在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unable to locate the .NET SDK

问题描述: vs2019 加载项目时,提示如下: Unable to locate the .NET SDK as specified by global.json, please check that the specified version is installed. 项目中没有globan找al.json 文件 先使用: dotnet --list-sdks 命…

使用 docker-compose 搭建个人博客 Halo

说明 我这里使用的是 Halo 作为博客的工具,毕竟是开源了,也是使用 Java 写的嘛,另外一点就是使用 docker 来安装(自动挡,不用自己考虑太多的环境因素),这样子搭建起来更快一点,我们…

SpringCloudAlibaba:5.1Sentinel的基本使用

概述 简介 Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 官网 https://sentinelguard.io/zh-cn/ Sentinel的历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年…

[ue5]编译报错:使用未定义的 struct“FPointDamageEvent“

编译报错,错误很多,但很明显核心问题是第一个:使用未定义的 struct“FPointDamageEvent“: 程序没有找到FPointDamageEvent的定义。 解决办法: 处理这类未定义都可以先F12,找到它的库位置,之后…

数据结构——快速排序

基本思想: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,…

BMJ英国医学杂志文献去哪里下载

《柳叶刀》The Lancet、《新英格兰医学期刊》NEJM、《美国医学会杂志》JAMA、《英国医学期刊》BMJ是世界四大医学顶尖期刊,今天有位医学同学求助一篇BMJ英国医学杂志文献,下面就用这篇文献演示一下在家获取BMJ文献的方法及过程。 文献名:Sur…

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件,其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch,用户可以轻松设置各种手势,如三指轻点、四指左右滑动等,来执行常见的任务,如打开应用、切换窗口、滚…

视频号创作分成计划实战指南:保姆级教程,带你玩转新副业

视频号的月活跃用户数量已在去年突破了8亿大关,并且不断增长。 在这篇文章中,我将与大家分享视频号的运营玩法和作品创作方向。 一、玩法流程 开通条件 要开通创作者分成计划功能,需要满足以下条件: 粉丝数量达到100及以上。 …

Python专题:十一、集合

集合的初始化 . 字符串中的重复元素只能保留一个 数学中的集合操作 - 求两个集合的差集 & 求两个集合的交集 | 合并两个集合元素

word-快速入门

1、熟悉word界面 2、word排版习惯 3、排版文本基本格式 1、word界面 选项卡 功能组 点击功能组右下角小三角可以开启完整功能组,获得启动器 软件右上角有功能显示折叠按钮 2、排版好习惯 (1)随时保存 (2)规范文件命…

矩阵相关运算1

矩阵运算是线性代数中的一个核心部分,它包含了许多不同类型的操作,可以应用于各种科学和工程问题中。 矩阵加法和减法 矩阵加法和减法需要两个矩阵具有相同的维度。操作是逐元素进行的: CAB or CA−B其中 A,B 和 C 是矩阵,且 C…

Apache Knox 2.0.0使用

目录 介绍 使用 gateway-site.xml users.ldif my_hdfs.xml my_yarn.xml 其它 介绍 The Apache Knox Gateway is a system that provides a single point of authentication and access for Apache Hadoop services in a cluster. The goal is to simplify Hadoop securit…

双轴测径仪功能多 适用于各行各业外径检测

JG02Z-DG 系列双轴测径仪是双光路外径检测设备,两组测头可以进行不同形式的组合,从而完成不同产线需求的检测,今天我们主要讲解45角双轴测径仪,该种测径仪是较为常用的检测设备,两组测头与水平方向垂直方向呈45度角&am…

免费SSL证书有效期现状

自2024年4月25日起,腾讯云上申请的免费SSL证书有效期将从原先的12个月调整为3个月。而在其他平台,比如Gworg,已经有策略表明将停止签发1年期的免费SSL证书,转而仅提供有效期为3个月的证书。 目前,免费SSL证书的有效期…

笨方法自学python(一)

我觉得python和c语言有很多相似之处,如果有c语言基础的话学习python也不是很难。这一系列主要是学习例题来学习python;我用的python版本是3.12 代码编辑器我用的是notepad,运行py程序用cmd 现在开始写第一个程序: print ("…

拉线开关C++

题目&#xff1a; 思路&#xff1a; m%2的结果为0&#xff0c;就证明开关次数为偶数也就是处于关灯的状态就按题目所要求的输出0&#xff1b; 否则&#xff0c;就证明开关次数为奇数也就是处于开灯的状态就按题目所要求的输出1. 代码 &#xff1a; #include<iostream> u…

IDEA-SpringBoot项目yml配置文件不自动提示解决办法

文章目录 一、五花八门的解决方案二、通用解决方案 前言&#xff1a;本文为SpringBoot项目配置文件.yaml/.yml文件编写时没有自动提示的解决方案 一、五花八门的解决方案 同样的&#xff0c;当resources中只存在.properties文件和.yaml文件时&#xff0c;.yaml文件会主动提示信…

Vue3组件库开发项目实战——02项目搭建(配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest)

摘要&#xff1a;在现代前端开发中&#xff0c;构建一个高效、可维护且易于协作的开发环境至关重要。特别是在开发Vue3组件库时&#xff0c;我们需要确保代码的质量、一致性和文档的完整性。本文将带你从0搭建vue3组件库开发环境&#xff0c;以下是配置代码规范、格式化、CSS样…

JVS物联网平台点位管理:让数据更高效

采集点位数据管理 采集点位数据管理采用列表页的方式进行展示&#xff0c;系统支持新增、批量导入、批量导出、批量删除、点位发现等功能&#xff0c;点位的详情、删除、历史记录等&#xff1a; 点位新增 点击新增点位按钮&#xff0c;在弹出表单中&#xff0c;可以填写相关的…

深入理解JavaScript事件循环Event Loop:宏任务与微任务的奇幻之旅

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f389; 引言&#x1f31f; 什么是事件循环&#xff1f;&#x1f4da; 「宏任务」 vs 「微任务」「宏任务」(Macrotask)「微任务」(Microtask)实际应用中的注意事项 &#x1f500; 执行流程概览&#x1f4dd; 代码示例…