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

【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 控件进入到容器类的学习;当然本篇博客特别通俗易懂,对新手特别友好,值得一观。好了过几天又是中秋节了,提前祝各位程序员中秋快乐!!那时你们应该在和家人在一起赏月吧,好吧,我也想我的父母了。祝我的老爸老妈,节日快乐!!

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

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

Read more

JAVA API (三):从基础爬虫构建到带条件数据提取 —— 详解 URL、正则与爬取策略

JAVA API (三):从基础爬虫构建到带条件数据提取 —— 详解 URL、正则与爬取策略

个人主页-爱因斯晨 文章专栏-Java学习 相关文章:API (一) 相关文章:API(二) 持续努力中,感谢支持 一、爬虫基础 (一)爬虫的基本概念 * 定义:爬虫是按照一定规则自动抓取网络信息的程序,在 Java 环境下,可借助URL、HttpURLConnection等 API 来实现。 * 应用场景:广泛应用于数据采集,如电商平台的价格监控、各类新闻的聚合;还可用于信息分析,如舆情监测等。 (二)Java 实现简单爬虫的步骤 建立网络连接:利用URL类确定目标网页的地址,再通过openConnection()方法获取HttpURLConnection对象。 URL url =newURL("https://example.com");HttpURLConnection conn =(HttpURLConnection) url.openConnection(); 设置请求参数:

By Ne0inhk
Java 大视界 -- Java 大数据在智能教育在线考试系统中的考试结果分析与教学反馈优化中的应用(420)

Java 大视界 -- Java 大数据在智能教育在线考试系统中的考试结果分析与教学反馈优化中的应用(420)

Java 大视界 -- Java 大数据在智能教育在线考试系统中的考试结果分析与教学反馈优化中的应用(420) * 引言: * 正文: * 一、智能教育在线考试系统的需求痛点与 Java 大数据的适配逻辑 * 1.1 在线考试系统的四大教学痛点(2024 年教育信息化公开数据) * 1.2 Java 大数据 vs 其他技术栈(教育场景实测对比) * 1.3 教育场景的 Java 大数据技术栈选型(按规模适配) * 二、Java 大数据在在线考试系统中的两大核心场景落地 * 2.1 场景一:考试结果多维分析(高校课程考试核心需求) * 2.1.1 架构设计(某省属高校实战架构) * 2.1.2 核心代码:Spark SQL 多维分析(

By Ne0inhk

JavaScript Window Location

JavaScript Window Location 引言 在Web开发中,window.location 对象是浏览器窗口中的一个重要属性,它提供了访问当前URL的接口。理解并正确使用 window.location 对象对于开发动态网页和应用程序至关重要。本文将详细介绍 window.location 对象的属性、方法以及如何在JavaScript中操作它们。 window.location 对象概述 window.location 是一个对象,包含了浏览器当前加载页面的URL信息。它允许开发者读取和修改URL,从而实现页面跳转、获取查询参数等功能。 属性 以下是 window.location 对象的一些常用属性: * href: 返回当前页面的完整URL。 * protocol: 返回当前页面的协议(例如:http, https)。 * host: 返回当前页面的域名和端口号。 * hostname: 返回当前页面的域名。 * port: 返回当前页面的端口号。 * pathname: 返回当前页面的路径。 * search: 返回当前页面的查询

By Ne0inhk
【技术架构】从单机到微服务:Java 后端架构演进与技术选型核心方案

【技术架构】从单机到微服务:Java 后端架构演进与技术选型核心方案

🔥个人主页: 中草药  🔥专栏:【Java】登神长阶 史诗般的Java成神之路 一、单机架构         单机架构的核心是 “单点部署”:后端服务的所有功能模块(从接收请求到返回响应)都在一台机器内完成,不存在跨机器的网络通信(如分布式中的服务调用、跨节点数据库访问)。 诞生于互联网发展早期阶段:当时用户访问量小、业务场景简单,单机的计算(CPU、内存)与存储(磁盘)能力,足以支撑业务需求,无需多机分布式协作。 可以用一个简单的类比理解: * 单机架构 ≈ 一家 “夫妻小店”:老板(应用服务)、仓库(数据库)、收银台(Web 服务器)、货架(静态资源)都在同一个店面里,顾客(用户)的需求在店内即可全部满足,无需联系外部。 * 分布式架构 ≈ 连锁超市:总部(核心服务)、分店(

By Ne0inhk