【C/C++】不许你不知道 Table/Tree Widget、Group Box控件的使用方法

目录

一、Table Widget 控件

二、Tree Widget 控件

三、Group Box 控件


前言:

        各位国庆节快乐啊!!本篇博客在2025年国庆节诞生,嘿嘿没想到吧,国庆节也有人在偷偷内卷。好吧主要是打游戏打累了就学会学习;下面给大家介绍一下这篇博客,它是关于 Qt 控件类的,我是真没想到 Qt 作为一个编写前端的语言,居然有这么多的控件;麻烦学JAVA的程序员说一下JAVA也有这么多的控件吗? 

一、Table Widget 控件

        ▶️Table Widget 表示一个表格控件,一个表格中包含若干行,每一行又包含若干列,表格中的每个单元都是一个 QTableWidget 对象。

        ⏩️我们来看一下他的核心方法:

方法说明
item(int row, int column)根据⾏数列数获取指定的 QTableWidgetItem*
setItem(int row, int column, QTableWidget*)根据⾏数列数设置表格中的元素
currentItem()返回被选中的元素 QTableWidgetItem*
currentRow()返回被选中元素是第⼏⾏
currentColumn()返回被选中元素是第⼏列
row(QTableWidgetItem* )获取指定 item 是第⼏⾏
column(QTableWidgetItem* )获取指定 item 是第⼏列
rowCount()获取⾏数
columnCount()获取列数
insertRow(int row)在第 row ⾏处插⼊新⾏
insertColumn(int column)在第 column 列插⼊新列
removeRow(int row)删除第 row ⾏
removeColumn(int column)删除第 column 列
setHorizontalHeaderItem(int column, QTableWidget*)设置指定列的表头
setVerticalHeaderItem(int row, QTableWidget*)设置指定⾏的表头

QTableWidgetItem 核心信号:

信号说明
cellClicked(int row, int column)点击单元格时触发
cellDoubleClicked(int row, int column)双击单元格时触发
cellEntered(int row, int column)⿏标进⼊单元格时触发
currentCellChanged(int row, int column, int previousRow, int previousColumn)选中不同单元格时触发

⏩️QTableWidgetItem 核心方法:

方法说明
row()获取当前是第⼏⾏
column()获取当前是第⼏列
setText(const QString&)设置⽂本
setTextAlignment(int)设置⽂本对⻬
setIcon(const QIcon&)设置图标
setSelected(bool)设置被选中
setSizeHints(const QSize&)设置尺⼨
setFont(const QFont&)设置字体

⏩️代码练习:

🚩1.初始化列表有两种方式:直接从图形化界面初始化、代码编写。

🚩2、代码编辑

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

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

    //初始化
    //创建3行
    ui->tableWidget->insertRow(0);
    ui->tableWidget->insertRow(1);
    ui->tableWidget->insertRow(2);

    //创建3列
    ui->tableWidget->insertColumn(0);
    ui->tableWidget->insertColumn(1);
    ui->tableWidget->insertColumn(2);

    //给3列都设置列名(就是设置水平方向的表头)
    ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("学号"));
    ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("年龄"));

    //给表格中添加数据
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("1001"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("小龙"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("10"));

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("1002"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("小陈"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("9"));

    ui->tableWidget->setItem(2,0,new QTableWidgetItem("1003"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("小张"));
    ui->tableWidget->setItem(2,2,new QTableWidgetItem("11"));


}

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


void Widget::on_pushButton_insertRow_clicked()
{
    //获取当前行数
    int rowcount = ui->tableWidget->rowCount();
    //在最后一行的后面新增加一行
    //注意下面的参数是下标,表示你新增加之后的这一行是第几行
    ui->tableWidget->insertRow(rowcount);
}

void Widget::on_pushButton_deleteRow_clicked()
{
    //获取选中的行数
    int curRow = ui->tableWidget->currentRow();
    //删除这一行
    ui->tableWidget->removeRow(curRow);
}

void Widget::on_pushButton_insertColum_clicked()
{
    //获取当前列数
    int colCount = ui->tableWidget->columnCount();
    //在对于的位置新增这一列
    ui->tableWidget->insertColumn(colCount);
    //设置列名(从输入框中获取)
    const QString& text = ui->lineEdit->text();
    ui->tableWidget->setHorizontalHeaderItem(colCount,new QTableWidgetItem(text));

}

void Widget::on_pushButton_deleteColum_clicked()
{
    //获取选中的列数
    int curCol = ui->tableWidget->currentColumn();
    //删除选中列数
    ui->tableWidget->removeColumn(curCol);
}

二、Tree Widget 控件

        ▶️TreeWidget 是一个树状结构的控件,说人话就是跟我们的C盘目录差不多,就是在磁盘创建一个文件夹然后在创建一个文件夹这样子。话不多说直接看一下他的核心方法:

方法说明
clear清空所有⼦节点
addTopLevelItem(QTreeWidgetItem* item)新增顶层节点(相当于在C盘再创建一个文件夹)
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 核心属性:

属性说明
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()获取该元素的⽗节点

⏩️代码练习:

⏩️初始化数有两种操作:1.直接在图形化界面操作。1.编写代码初始化。

#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,"猫");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item1);

    //新增加顶层节点
    QTreeWidgetItem* item2 = new QTreeWidgetItem();
    //每个节点都可以设置多个列,此处只设置一列
    item2->setText(0,"狗");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item2);

    //新增加顶层节点
    QTreeWidgetItem* item3 = new QTreeWidgetItem();
    //每个节点都可以设置多个列,此处只设置一列
    item3->setText(0,"鸟");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item3);

    //添加子节点
    QTreeWidgetItem* item4 = new QTreeWidgetItem();
    item4->setText(0,"小猫");
    item1->addChild(item4);

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



}

#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,"猫");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item1);

    //新增加顶层节点
    QTreeWidgetItem* item2 = new QTreeWidgetItem();
    //每个节点都可以设置多个列,此处只设置一列
    item2->setText(0,"狗");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item2);

    //新增加顶层节点
    QTreeWidgetItem* item3 = new QTreeWidgetItem();
    //每个节点都可以设置多个列,此处只设置一列
    item3->setText(0,"鸟");
    //把item1添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item3);

    //添加子节点
    QTreeWidgetItem* item4 = new QTreeWidgetItem();
    item4->setText(0,"小猫");
    item1->addChild(item4);

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



}

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


void Widget::on_pushButton_insertTopleveItem_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* currentItem = ui->treeWidget->currentItem();
    if(currentItem == nullptr)
    {
        return;
    }
    //获取到输入框中的内容
    const QString& text = ui->lineEdit->text();
    //构造一个 QTreeWidgetItem
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0,text);
    currentItem->addChild(item);
}

void Widget::on_pushButton_deletItem_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);
    }
}

❌️注意:上面几个控件的操作的数据都是在内存中保存的,一旦重新运行程序之前的数据就没有了;如果不想让数据重启就没有就需要编写更多的代码把内存存储的数据获取到,然后写到文件中,并且在下一次运行程序的时候加载数据。

三、Group Box 控件

        ▶️Group Box 控件是一个分组框控件,它可以把多个控件放到一起作为一组,属于容器类控件。

❌️注意:GroupBox 里面的控件的父元素不是 this ,而是 GroupBox。目的是为让界面更加好看,当一个界面比较复杂的时候,里面包含许多的控件,分组框可以把具有关联关系的控件组织在一起。

⏩️核心属性:

属性说明
title分组框的标题
alignment分组框内部内容的对⻬⽅式
flat是否是 "扁平" 模式
checkable是否可选择。 设为 true,则在 title 前⽅会多出⼀个可勾选的部分
checked描述分组框的选择状态 (前提是 checkable 为 true)

⏩️代码练习:

⏩️不用编写代码直接运行就行,我们只是看看这个控件的效果。

五、总结

        ⏩️本篇博客主要写了 Qt 的 Table Widget 控件、Tree Widget 控件、Group Box 控件的使用方法和相关属性介绍,相当于是一份使用说明书吧;特别是 Group Box 控件进入到容器类的学习;当然本篇博客特别通俗易懂,对新手特别友好,值得一观。好了过几天又是中秋节了,提前祝各位程序员中秋快乐!!那时你们应该在和家人在一起赏月吧,好吧,我也想我的父母了。祝我的老爸老妈,节日快乐!!

        哦!对了,各位优秀的程序员觉得我博客给你带来帮助或者让你学到了知识,记得给博主一个关注哦~❤️❤️❤️

        各位博友,下篇博客见🍁🍁🍁

评论 25
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值