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 

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);
    }
}

Qt常用控件之树形QTreeWidget_第1张图片

你可能感兴趣的:(qt,c++,qt6.3,前端)