【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂

news2025/7/21 17:05:02


每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”

✍️绪论​:
本章主要介绍了 Qt 中 QGroupBox 与 QTabWidget 控件。QGroupBox 是带标题的分组框,能容纳其他控件,有标题、对齐方式、是否扁平、是否可勾选等属性,可通过拖拽添加控件测试属性,需借助布局管理器使用。QTabWidget 用于实现标签页切换界面,有标签页位置、当前选中标签页信息、是否可关闭移动等属性,以及切换、点击等信号。实操部分展示了图形化添加标签页及代码实现新增、关闭标签页和感知切换等功能。
————————
早关注不迷路🔥,话不多说安全带系好,发车啦(建议电脑🖥️观看)。

在这里插入图片描述

文章目录

  • 🖼️ QGroupBox 分组框
    • 💻实操:了解 flat、checkable属性
  • 🎠Tab Widget
    • ⌨️实操

🖼️ QGroupBox 分组框

QGroupBox 本质就是⼀个带有标题的分组框

  • 可以把其他的控件放到⾥⾯作为⼀组
  • 看起来能更好看⼀点,也能更方便的管理
    在这里插入图片描述
    在上面的框中就能放到 GroupBax 中,内部的控件的父元素就不是this了,而是GroupBox(不过GroupBox的父元素同样还是this)

核⼼属性🎈

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

💻实操:了解 flat、checkable属性

  1. 拖拽一个GroupBox内部在添加一个Label、Combo Box和 spin Box
    1. 此时右上角的控件关系 GroupBox 就是内部控件的父元素
    2. 给combo中添加内容:麦辣鸡腿堡。。。(具体如下图)
  2. 测试使用
    1. 当勾选 flat 时边框就不会出现(具体下图解释)
    2. checkable 会给Group设置勾选框
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

📄源码:无,就就简单的拖拽式ui实现的学习下~

附加内容

要点提示: QGroupBox不能直接添加控件,必须通过布局管理器来添加。

🎠Tab Widget

使⽤ QTabWidget 实现⼀个带有标签⻚的控件,可以往⾥⾯添加⼀些 widget。进⼀步的就可以通过标签⻚来切换界面
(非常类似Excel中的底端的多个表格,如下图)
在这里插入图片描述

核⼼属性🎈

属性说明
tabPosition标签⻚所在的位置
• North 上⽅
• South 下⽅
• West 左侧
• East 右侧
currentIndex当前选中了第⼏个标签⻚ (从 0 开始计算)
currentTabText当前选中的标签⻚的⽂本
currentTabName当前选中的标签⻚的名字
currentTabIcon当前选中的标签⻚的图标
currentTabToolTip当前选中的标签⻚的提⽰信息
tabsCloseable标签⻚是否可以关闭 (仅仅只是提供按钮,需要自己实现槽函数)
movable标签⻚是否可以移动

核⼼信号🚦

属性说明
currentChanged(int)在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号.
tabBarClicked(int)在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabBarDoubleClicked(int)在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabCloseRequest(int)在标签⻚关闭时触发. 参数为被关闭的选项卡编号

⌨️实操

🎨图形化实践:

  1. 拖拽一个Tab Widget

  2. 两个标签,中都放下一个Label:第一/二个标签页

  3. 可以通过TabWidget右键选择:快速的新增标签页和删除标签页
    在这里插入图片描述

  4. tabPosition 设置切换标签页所在的位置

在这里插入图片描述

🧑‍💻代码操作:

目的:
  创建一个程序,带有一个Tab Widget 标签页,提供两个按钮,分别创建新的标签页,关闭当前选中的标签页。当切换标签页的时候也能感知到变化。

过程:

  1. 拖拽:TabWidget、新增标签页按钮、关闭标签页按钮
  2. 代码实现:在每个标签页中添加一个Label,
    1. 构造传递标签页的 currentTabName 代表加入到哪个表中(指定父元素
    2. 若想访问标签页,通过 ui -> currentTabName 也就能访问标签页(currentTabName就相对于标签页的ObjectName
    3. 设置文本为:标签页1、设置大小 100 50
  3. 同上操作:标签页2、大小 100 50
  4. 添加按钮点击信号的槽函数
    1. 使用addTab方法来创建新的标签页
      1. 参数1 要指定一个QWidget(标签页本质就是一个QWidget
      2. 参数2 指定这个标签页的text标题(叫做:Tab + 数字)
    2. 为命名准备
      1. 获取当前标签页的数量(调用tabWidget::count
    3. 创建QWidget对象,就能调用addTab进行添加新标签页了
    4. 并在内部添加一个QLabel显示内容,将内部内容设置为 标签页 count,并设置大小
    5. 打开新增的标签页:通过 setCurrentIndex(参数是下标 就是之前的count数量)
  5. 删除按钮点击信号的槽函数
    1. 获取当前选中的标签页下标 currentIndex
    2. 删除标签页 removeTab(下标)
  6. 也能通过 添加 tabCloseable属性添加表单的关闭图标
    1. 然后当用户点击后就会触发 tabCloseRequest 信号,再能通过槽函数实现关闭
      在这里插入图片描述
  7. 切换标签页currentChanged触发信号设置槽函数:
    1. 打印:当前选中的标签页是:index

在这里插入图片描述

📄源码:

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QDebug>

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

    QLabel* label1 = new QLabel(ui->tab);
    label1->setText("标签页1");
    label1->resize(100,50);

    QLabel* label2 = new QLabel(ui->tab_2);
    label2->setText("标签页1");
    label2->resize(100,50);
}

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


void Widget::on_pushButton_clicked()
{
    //为添加新标签做准备
        //1. 获取当前标签页个数
    int count = ui->tabWidget->count();
    QString name = "Tab" + QString::number(count+ 1);
    QWidget* widget = new QWidget();

    ui->tabWidget->addTab(widget,name);

    //给widget标签页中添加label

    QLabel* label = new QLabel(widget);
    label->setText(name);
    label->resize(100,50);

    //打开当前的页表(跟符合常理)
    ui->tabWidget->setCurrentIndex(count);//参数是index下标
}

void Widget::on_pushButton_2_clicked()
{
    //获取当前选中的标签页的下标
    int index = ui->tabWidget->currentIndex();
    //删除当前的标签页
    ui->tabWidget->removeTab(index);
}

void Widget::on_tabWidget_tabCloseRequested(int index)
{
    //删除当前的标签页
    ui->tabWidget->removeTab(index);
}

void Widget::on_tabWidget_currentChanged(int index)
{
    qDebug() << index << endl;
}


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量C++细致内容,早关注不迷路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2391966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SOC-ESP32S3部分:18-串口

飞书文档https://x509p6c8to.feishu.cn/wiki/NqrMw6X8Si6sSqkyPbxcFRxGnid UART全称是通用异步接收器/发送器&#xff0c;ESP32-S3 芯片有 3 个 UART 控制器。每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。 串口文档参考&#xf…

https下git拉取gitlab仓库源码

git init 创建仓库 参考下面创建公私秘钥对 注意不要以root用户身份创建公私钥&#xff0c;确保保存在/home/username GitLab配置ssh key - 阿豪聊干货 - 博客园 Your identification has been saved in /home/xxx/.ssh/id_ed25519 Your public key has been saved in /ho…

距离计算范围查找距离排序

一 使用场景 目前基于某个位置查附近的人&#xff0c;附近的商家等等&#xff0c;查出来的结果添加距离&#xff0c;或者查附近多大范围内的人或者商家&#xff0c;然后按距离排序已经是IT界一个很通用的功能了。 二 距离计算搜索(百万点集以下) 2.1 球的定义 2.2 两点之…

PS linux 基础篇1-AXI_DMA

系列文章目录 文章目录 系列文章目录前言一、AXI DMA ip核二、BD工程三、PS linux工程1.使用开源的xilinx_axidma-master工程验证驱动2.按照其他的开源进行就行&#xff0c;没什么写的了 前言 PL与PS之间快速的接口&#xff0c;本文为LOOP回环测试 一、AXI DMA ip核 MM2S mem…

AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔

一、说明 ComfyUI是一个开源的、基于节点的Web应用。它允许用户根据一系列文本提示&#xff08;Prompt&#xff09;生成图像。 ComfyUI使用扩散模型作为基础模型&#xff0c;并结合 ControlNet、Lora和LCM低阶自适应等模型&#xff0c;每个工具都由程序中的一个节点表示 二、开…

Collection集合遍历的三种方法

1.foreach循环遍历 格式&#xff1a;for&#xff08;元素的数据类型 变量名&#xff1a;数组或集合&#xff09;{ } 2.使用迭代器遍历 方法名称&#xff1a;Iterator<E> iterator&#xff08;&#xff09; 说明&#xff1a;返回集合中的迭代器对象&#xff0c;该迭代…

Taro on Harmony C-API 版本正式开源

Taro 是由京东发起并维护的开放式跨端跨框架解决方案&#xff0c;支持以 Web 的开发范式来实现小程序、H5、原生 APP 的跨端统一开发&#xff0c;从 18 年开源至今&#xff0c;在 GitHub 已累计获得 36,000 Stars。 Taro x 纯血鸿蒙 在过去的一年中&#xff0c;Taro 经历了显…

知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好

25年5月来自PI的论文“Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better”。 视觉-语言-动作 (VLA) 模型通过将端到端学习与来自网络规模视觉-语言模型 (VLM) 训练的语义知识迁移相结合&#xff0c;为机器人等物理系统训练控制策…

[ARM][架构] 02.AArch32 程序状态

目录 参考资料 1.程序状态 - PSTATE 2.用户模式的 PSTATE 信息 2.1.状态标志 2.2.溢出/饱和标志 2.3.大于等于标志 2.4.指令集状态 2.5.IT 块状态 2.6.端序控制 2.7.指令执行时间控制 3.用户模式访问 PSTATE - APSR 寄存器 4.系统模式的 PSTATE 信息 4.1.状态标志…

React---day4

3、React脚手架 生成的脚手架的目录结构 什么是PWA PWA全称Progressive Web App&#xff0c;即渐进式WEB应用&#xff1b;一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用&#xff1b;随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线…

ArkUI(方舟UI框架)介绍

ArkUI&#xff08;方舟UI框架&#xff09;介绍 构建快速入门 使用ArkWeb构建页面

若依微服务的定制化服务

复制依赖 复制依赖 复制system服务的bootstrap.yml文件&#xff0c;修改port和name 在nacos复制一个新的nacos配置&#xff0c;修改对应的nacos的配置 &#xff0c;可能不需要修改&#xff0c;看情况。 网关修改 注意curd的事项&#xff0c;模块名称的修改

Axios 如何通过配置实现通过接口请求下载文件

前言 今天&#xff0c;我写了 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 和 《NodeJS 基于 Koa, 开发一个读取文件&#xff0c;并返回给客户端文件下载》 两篇文章。在这两篇文章中&#xff0c;我实现了数据库的备份&#xff0c;和提供数据库下载等接口。 但是&…

20250529-C#知识:运算符重载

C#知识&#xff1a;运算符重载 运算符重载能够让我们像值类型数据那样使用运算符对类或结构体进行运算&#xff0c;并且能够自定义运算逻辑。 1、运算符重载及完整代码示例 作用是让自定义的类或者结构体能够使用运算符运算符重载一定是public static的可以把运算符看成一个函…

如何在WordPress网站中添加相册/画廊

在 WordPress 网站上添加相册可以让您展示许多照片。无论您是在寻找标准的网格相册画廊还是独特的瀑布流相册画廊体验&#xff0c;学习如何在 WordPress 网站上添加相册总是一个好主意。在本教程中&#xff0c;我们将介绍两种为 WordPress 网站添加相册的方法&#xff1a;使用区…

Codeforces Round 1025 (Div. 2)

Problem - A - Codeforces 查有没有人说谎&#xff0c;有一个必错的情况&#xff1a; 两个人都说输了&#xff0c;必有人撒谎&#xff0c;还有就是所有人都赢了&#xff0c;也是撒谎 来看代码&#xff1a; #include <iostream> #include <vector> using namespa…

Ubuntu20.04操作系统ssh开启oot账户登录

文章目录 1 前提2 设置root密码3 允许ssh登录root账户3.1 编辑配置文件3.2 重启ssh服务 4 安全注意事项 1 前提 ssh可以使用普通用户正常登录。 2 设置root密码 打开终端&#xff0c;设置密码 sudo passwd root # 设置root密码3 允许ssh登录root账户 3.1 编辑配置文件 su…

类欧几里得算法(floor_sum)

文章目录 普通floor_sum洛谷P5170 【模板】类欧几里得算法 万能欧几里得算法求 ∑ i 1 n A i B ⌊ a i b c ⌋ \sum_{i1}^{n}A^iB^{\lfloor \frac{aib}{c} \rfloor} ∑i1n​AiB⌊caib​⌋求 ∑ i 0 n ⌊ a i b c ⌋ \sum_{i0}^n \lfloor\frac{aib}{c}\rfloor ∑i0n​⌊caib…

每日Prompt:卵石拼画

提示词 世界卵石拼画大师杰作&#xff0c;极简风格&#xff0c;贾斯汀.贝特曼的风格&#xff0c;彩色的鹅卵石&#xff0c;斑马头像&#xff0c;鹅卵石拼画&#xff0c;马卡龙浅紫色背景&#xff0c;自然与艺术的结合&#xff0c;新兴的艺术创作形式&#xff0c;石头拼贴画&am…

硬件服务器基础

1、硬件服务器基础 2、服务器后面板 3、组件 3.1 CPU 3.2 内存 3.3 硬盘 3.4 风扇 4、服务器品牌 4.1 配置 4.2 CPU 架构 4.2.1 CPU 命名规则 4.2.2 服务器 CPU 和家用 CPU 的区别 4.2.3 CPU 在主板的位置 4.2.4 常见 CPU 安装方式 4.3 内存中组件 4.3.1 内存的分类 4.3.1.1 …