当前位置: 首页 > news >正文

Qt常用控件之树形QTreeWidget

树形QTreeWidget

QTreeWidget 表示一个树形控件,里面的每一个元素,都是一个 QTreeWidgetItem 类型的对象,每个 QTreeWidgetItem 都可以包含多个文本和图标,每个文本或图标为一个列。

需要注意的是, QTreeWidget 向用户屏蔽了根节点,也就是说,QTreeWidget 这颗树的顶层节点都是根节点的子节点,顶层节点可以有很多个。

1. QTreeWidget属性

没啥属性。

2. 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)元素被折叠时触发。

3. QTreeWidget方法

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

4. QTreeWidgetItem属性

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

5. QTreeWidgetItem方法

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

6. 使用QTreeWidget制作一个分类列表

注意代码中的边界处理逻辑:

#include "widget.h"
#include "ui_widget.h"
#include <QTreeWidget>

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

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

void Widget::on_pushButton_add_clicked()
{
    QString content=ui->lineEdit->text();
    if(content.isEmpty())
    {
        return;
    }
    QTreeWidgetItem* item=new QTreeWidgetItem();
    item->setText(0,content);
    ui->treeWidget->addTopLevelItem(item);
}


void Widget::on_pushButton_addSub_clicked()
{
    QString content=ui->lineEdit->text();
    if(content.isEmpty())
    {
        return;
    }
    QTreeWidgetItem* currentItem=ui->treeWidget->currentItem();
    if(currentItem==nullptr)
    {
        return;
    }
    QTreeWidgetItem* newItem=new QTreeWidgetItem();
    newItem->setText(0,content);
    currentItem->addChild(newItem);
    currentItem->setExpanded(true);
}

void Widget::on_pushButton_deleteSub_clicked()
{
    QTreeWidgetItem* currentItem=ui->treeWidget->currentItem();
    if(currentItem==nullptr)
    {
        return;
    }
    QTreeWidgetItem* parent =currentItem->parent();
    if(parent==nullptr)
    {
        int index=ui->treeWidget->indexOfTopLevelItem(currentItem);
        ui->treeWidget->takeTopLevelItem(index);
    }
    else
    {
        parent->removeChild(currentItem);
    }
}

QTreeWidget1

相关文章:

  • 系统架构设计师—系统架构设计篇—基于体系结构的软件开发方法
  • 可变参数与递归
  • R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
  • OmniDrive(2):环境搭建
  • 视觉在协作机器人上的场景应用
  • STM32之PWR
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(二)
  • DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)
  • 机器学习的发展史
  • 如何设计评论系统
  • 【计网】应用层
  • c语言程序设计--(数据的存储)冲刺考研复试面试简答题,看看我是怎么回答的吧!!!!!
  • C++设计模式总结
  • 最长递增子序列--蓝桥oj3046拍照
  • 深度学习|MAE技术全景图:自监督学习的“掩码魔法“如何重塑AI基础
  • FastExcel/EasyExcel简介以及源码解析
  • Ubuntu系统安装Minikube教程
  • π0及π0_fast的核心源码剖析——核心模块src的全面分析与解读:如何实现PaLI-Gemma、如何去噪生成动作
  • DTO 命名规范指南
  • 达梦数据库学习笔记@3
  • 瓦房店网站建设/seo编辑培训
  • 长沙最新死亡事件/seo零基础教学视频
  • 建设网站的目标客户群/企业网站推广渠道
  • 网站首页动画怎么做的/互联网销售包括哪些
  • 专业制作网站推荐/网络推广平台软件
  • 南宁做网站开发的公司/百度推广首页登录