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

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


http://www.kler.cn/a/580572.html

相关文章:

  • 如何使用postman来测试接口
  • Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。
  • 雪藏HsFreezer(游戏冻结工具) v2.21
  • jsonRPC实现前后端分离
  • delphi 正则提取html中的内容
  • listen EACCES: permission denied 0.0.0.0:811
  • Ubuntu 创建systemd服务
  • LeetCode 2380 二进制字符串重新安排顺序需要的时间
  • Docker Compose国内镜像一键部署dify
  • C#常用的循环语句
  • 马斯克:AI游戏前景无限
  • Redis 持久化配置:保障数据安全与可恢复性
  • clickhouse查询效率低
  • Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)
  • 【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元
  • 解决电脑问题(9)——“此电脑”问题
  • AI革命编程学习:Python语法速通与高阶突破全实战(第一部分:AI驱动基础语法速通)
  • 【人工智能-01-01】人工智能导论——假币问题
  • Claude:AI领域的多面手,从语言模型到智能编码
  • C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解