Qt多元素控件——QTreeWidget

37 篇文章 1 订阅

QTreeWidget

QTreeWidget表示树形控件,里面每个元素都是一个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个文本和图标,每个文本/图标都是一个列。

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

和数据结构的树,还是有点差别。

这个树形结构没有体现出根节点,从根节点的下一层子节点开始计算的

image-20240916152452428

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

QTreeWidgetItem核心属性及方法

QTreeWidgetItem核心属性

属性说明
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使用示例

界面属性设置:

image-20240916154327335

图形化界面初始化:

image-20240916155907357

代码示例:

#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* itemChild1 = new QTreeWidgetItem();
    itemChild1->setText(0, "可乐");
    item1->addChild(itemChild1);

    QTreeWidgetItem* itemChild2 = new QTreeWidgetItem();
    itemChild2->setText(0, "雪碧");
    item1->addChild(itemChild2);

}

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


void Widget::on_pushButton_insertTopLevelItem_clicked()
{
    //获取到输入框中的内容
    const QString& text = ui->lineEdit->text();
    //构造QTreeWidgetItem
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    //添加到顶层节点
    ui->treeWidget->addTopLevelItem(item);
}

void Widget::on_pushButton_insertItem_clicked()
{
    //获取当前选中节点
    QTreeWidgetItem* curItem = ui->treeWidget->currentItem();
    if(curItem == nullptr)  return;
    //获取到输入框中的内容
    const QString& text = ui->lineEdit->text();
    //构造QTreeWidgetItem
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    //添加到选中节点
    curItem->addChild(item);

}

void Widget::on_pushButton_erase_clicked()
{
    //获取当前选中节点
    QTreeWidgetItem* curItem = ui->treeWidget->currentItem();
    if(curItem == nullptr)  return;

    //删除选中元素    获取父元素,从父元素顶层删除
    QTreeWidgetItem* parent = curItem->parent();
    if(parent == nullptr)
    {
        //获取下标
        int index = ui->treeWidget->indexOfTopLevelItem(curItem);
        ui->treeWidget->takeTopLevelItem(index);
    }
    else
    {
        parent->removeChild(curItem);
    }
}

GIF 2024-9-16 16-24-22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加法器+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值