【Qt】多元素控件QTreeWidget

news2024/12/22 16:43:04

多元素控件QTreeWidget

使用QTreeWidget表示一个树型结构,里面的每一个元素都是QTreeWidgetItem,每个QTreeWidgetItem可以包含多个文本和图标,每个文本/图标表示一列。

可以给QTreeWidget设置顶层结构(顶层节点可以有多个),然后再给顶层节点添加字节点,从而构成树型结构。

QTreeWidget控件虽然是树型结构,但是这个树型结构没有体现出根节点,是从根节点的下一层字节点开始计算的。

  • QTreeWidget的核心方法
方法说明
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 名称
  • QTreeWidget的核心信号
信号说明
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)
元素被折叠时触发
  • QTreeWidgteItem的核心属性
属性说明
text
持有的⽂本
textAlignment
⽂本对⻬⽅式
icon
持有的图表
font
⽂本字体
hidden
是否隐藏
disabled
是否禁⽤
expand
是否展开
sizeHint
尺⼨⼤⼩
selected
是否选中
  • QTreeWidgetItem的核心方法
方法说明
addChild(QTreeWidgetItem* child)
新增⼦节点
childCount()
⼦节点的个数
child(int index)
获取指定下标的⼦节点. 返回 QTreeWidgetItem*
takeChild(int index)
删除对应下标的⼦节点
removeChild(QTreeWidgetItem* child)
删除对应的⼦节点
parent()
获取该元素的⽗节点

例子:使用QTreeWidget新增与删除元素

(1)在界面上创建一个TreeWidget,三个按钮,一个lineEdit

(2)初始化TreeWidget里的数据

(3)实现三个按钮的slot函数

(4)执行程序

(5)代码展示

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置根节点的名字
    ui->treeWidget->setHeaderLabel("动物");

    // 新增顶层节点
    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, "鸟");
    ui->treeWidget->addTopLevelItem(item3);

    // 添加字节点
    QTreeWidgetItem* item4 = new QTreeWidgetItem();
    item4->setText(0, "中华田园猫");
    item1->addChild(item4);

    QTreeWidgetItem* item5 = new QTreeWidgetItem();
    item5->setText(0, "加菲猫");
    item1->addChild(item5);

    QTreeWidgetItem* item6 = new QTreeWidgetItem();
    item6->setText(0, "布偶猫");
    item1->addChild(item6);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_insertTop_clicked()
{
    // 获取编辑框里的文本
    const QString& text = ui->lineEdit->text();
    if(text.isEmpty()) return;
    // 将该文本设置成顶层元素
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    ui->treeWidget->addTopLevelItem(item);
}

void Widget::on_pushButton_insert_clicked()
{
    // 获取编辑框里的文本
    const QString& text = ui->lineEdit->text();
    if(text.isEmpty()) return;
    // 获取treeWidget选中的元素
    QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
    if(currentItem == nullptr) return;
    // 将文本设置成选中的子节点
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0 ,text);
    currentItem->addChild(item);
}

void Widget::on_pushButton_delete_clicked()
{
    // 获取treeWidget选中的元素
    QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
    if(currentItem == nullptr) return;
    // 获取当前选中节点的父节点
    QTreeWidgetItem* parentItem = currentItem->parent();
    if(parentItem == nullptr)
    {
        // 顶层元素
        int index = ui->treeWidget->indexOfTopLevelItem(currentItem);
        ui->treeWidget->takeTopLevelItem(index);
    }
    else
    {
        // 普通元素
        parentItem->removeChild(currentItem);
    }
}

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

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

相关文章

解放双手全自动铲屎!CEWEY、霍曼、小佩哪款智能猫砂盆更值得?

这马上要到节假日了,回家的话,自己养的猫咪该怎么办呢?如果猫咪的猫砂盆无人照料的话,那么就会导致我们的猫砂盆里全是猫咪的粪便,这些粪便放久了无人清理就会开始散发恶臭,导致家里臭气熏天,最…

【C++对于C语言的扩充】:auto关键字、范围for以及nullptr

文章目录 🚀auto关键字(C11)✈️auto介绍✈️auto的使用细则✈️auto不能使用的场景 🚀范围for(C11)✈️范围for介绍✈️范围for的使用条件 🚀指针空值nullptr(C11) &…

医药行业智能客服机器人的未来发展趋势探析

Hi~这里是ProXiao 文章参考:晓观点 智能客服机器人在医药行业的发展趋势是什么?https://insight.xiaoduoai.com/intelligent-tools/intelligent-customer-service-robot/what-is-the-development-trend-of-intelligent-customer-service-robots-in-the…

极光推送(JPush)赋能登虹科技,打造智慧视觉云平台新体验

近日,中国领先的客户互动和营销科技服务商极光(Aurora Mobile,纳斯达克股票代码:JG)与杭州登虹科技有限公司(以下简称“登虹科技(Closeli)”)达成合作,借助极…

【Threejs学习】Dat.GUI 辅助调参工具

一、介绍 dat.GUI 辅助调参工具,是一个轻量级的图形用户界面库(GUI 组件),使用这个库可以很容易地创建出能够改变代码变量的界面组件。 github地址: https://github.com/dataarts/dat.gui 二、使用 1.使用cdn引入 …

基于 SpringBoot+Vue的——陪玩平台

文章目录 前言1.项目类型2.技术栈介绍3.功能介绍4.项目亮点5.适用场景6.项目展示7.诚邀参与 前言 大家好,我是执手天涯,今天非常荣幸地向大家介绍一款备受瞩目的创新项目基于 SpringBootVue的——陪玩平台。这不仅仅是一个游戏社交平台,更是…

算法设计:实验三动态规划法

【实验目的】 应用动态规划算法思想求解矩阵连乘的顺序问题。 【实验要求】 应用动态规划算法的最优子结构性质和子问题重叠性质求解此问题。分析动态规划算法的基本思想,应用动态规划策略写出算法及相应的程序,求解此题。要读懂读透A[i,j]&…

stm32-SD卡实验

1. SD简介 SD卡,Secure Digital Card,称为安全数字卡(安全数码卡)。 SD卡系列主要有三种:SD卡(full size)、MiniSD卡和MicroSD卡(原名 TF卡)。 特点:容量大、高安全性、体积小、传…

threejs绘制带箭头的坐标系

效果图: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9319baf1e01946b8919490704e97532a.pn 实现思路: AxesHelper实现坐标系,但是是没有箭头的;这个对象会显示三个彩色的箭头,这些箭头分别表示x, y, z轴…

Android Studio Koala下载并安装,测试helloworld.

1、下载: 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 2、滚动条拉到近最后,各个系统的下载地址: 3、下载完成以后,我们双击运行安装: 如果有路径要修改,则修改下就可以了&a…

直播平台直播API集成之twitch篇

前言:     本篇我们来介绍如何使用twitch的直播API创建直播。 准备工作: 1、你首先得有个twitch账号; 2、创建twitch应用,主要是给自己的应用取名并配置授权回调地址(可配多个),如下图所示&…

Ae基础概念与界面讲解

目录 Ae软件的用途 Ae界面介绍 预设 界面介绍 首选项概念 导入与导出 Ae软件的用途 Ae是一款专业特效合成软件,通过对收集到的素材进行数字化的编辑组合到一起,进行艺术性的再加工后得到的最终作品。 Ae界面介绍 画面中最显眼的图标是新建合成&am…

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间:22 Dec 2023 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位:Google DeepMind Motivation:受视觉和语言基础模型的最新进展的启发&#xff0c…

第三十九篇-TeslaP40+CosyVoice-安装

环境 系统:CentOS-7 CPU: 14C28T 内存:32G 显卡:Tesla P40 24G 驱动: 535 CUDA: 12.2克隆 git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git cd CosyVoicegit submodule update --init --recursive下载 Matcha-TTS cd…

DWF 支持的 TON 链 Telegram 免费宠物游戏 Gatto_game,推出 “Paws Up! 世界锦标赛”

TON 链在这轮牛市里无疑是一匹脱缰的黑马,创造了一个又一个爆款,为持有者带来了不菲的收益。 Gatto_game 是一款 TON链 Tamagotchi 电子宠物风格的 P2E web3 游戏。可以通过喂养升级,参加比赛赚取 $TON 或者 $GTON ,或许就是下一个…

四大名著改编的ip大作,一个巨亏2亿,一个狂赚20亿!选择决定成败!

最近讨论热度比较高的当属《红楼梦》和《西游记》了 胡玫导演的《红楼梦之金玉良缘》耗费了18年的心血,投资了2个多亿 却仅仅只有600万票房,还被网友调侃称“一黛不如一黛” 而由《西游记》改编的游戏《黑神话悟空》,研发10年投资6亿&…

如祺出行发布首份中期业绩,总收入增长13.6%

8月28日,如祺出行发布2024年中期业绩公告。这是如祺出行于7月10日在港交所主板上市后发布的首份业绩公告。 业绩公告显示,2024年上半年如祺出行收入实现10.37亿元(单位:人民币,下同)、同比增长13.6%&#x…

Avalonia与WPF开发时的差异总结

1.一个控件绑定到另外一个控件的属性 WPF: <TextBox Height"30" Width"100" x:Name"tb"></TextBox><TextBlock Text"{Binding ElementNametb,PathText}" ></TextBlock>Avalonia: <TextBox Height"3…

梯度下降法求解线性回归

文章目录 线性回归损失函数平均绝对误差&#xff08;MAE&#xff09;均方误差&#xff08;MSE&#xff09; 最小二乘法最小二乘法代数推导最小二乘法矩阵推导 线性回归 Python 实现线性回归 scikit-learn 实现 梯度下降法梯度下降法的原理 梯度下降法求解线性回归 线性回归 线…

Java SpringBoot实战:如何构建学生档案管理系统实现信息管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…