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

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

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

文章目录

🖼️ 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 时边框就不会出现(具体下图解释)

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. tabPosition 设置切换标签页所在的位置

可以通过TabWidget右键选择:快速的新增标签页和删除标签页

在这里插入图片描述
在这里插入图片描述

🧑‍💻代码操作:

目的:
创建一个程序,带有一个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属性添加表单的关闭图标
  7. 切换标签页currentChanged触发信号设置槽函数:
    1. 打印:当前选中的标签页是:index

然后当用户点击后就会触发 tabCloseRequest 信号,再能通过槽函数实现关闭

在这里插入图片描述
在这里插入图片描述

📄源码:

#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 =newQLabel(ui->tab); label1->setText("标签页1"); label1->resize(100,50); QLabel* label2 =newQLabel(ui->tab_2); label2->setText("标签页1"); label2->resize(100,50);}Widget::~Widget(){delete ui;}voidWidget::on_pushButton_clicked(){//为添加新标签做准备//1. 获取当前标签页个数int count = ui->tabWidget->count(); QString name ="Tab"+QString::number(count+1); QWidget* widget =newQWidget(); ui->tabWidget->addTab(widget,name);//给widget标签页中添加label QLabel* label =newQLabel(widget); label->setText(name); label->resize(100,50);//打开当前的页表(跟符合常理) ui->tabWidget->setCurrentIndex(count);//参数是index下标}voidWidget::on_pushButton_2_clicked(){//获取当前选中的标签页的下标int index = ui->tabWidget->currentIndex();//删除当前的标签页 ui->tabWidget->removeTab(index);}voidWidget::on_tabWidget_tabCloseRequested(int index){//删除当前的标签页 ui->tabWidget->removeTab(index);}voidWidget::on_tabWidget_currentChanged(int index){qDebug()<< index << endl;}

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

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

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

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

Read more

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

在当前复杂业务系统研发中,我们常陷入诸多困境:需求反复变更导致开发返工,AI辅助编程易出现幻觉生成无效代码,多人协作时重复开发浪费精力,上线后频繁出现回归bug,文档与代码脱节成为“无效资产”。这些问题的核心,是缺乏一套统一可落地的研发范式,让需求、设计、开发、测试全流程形成闭环,而规格驱动开发(SDD,Spec-Driven Development),正是解决这一痛点的关键。 很多开发者对SDD的认知停留在“先写文档再写代码”的表面,甚至觉得它是“额外负担”,尤其在工期紧张的复杂项目中,更倾向于跳过规格设计直接编码。但事实上,SDD并非传统意义上的“文档绑架”,而是结合AI时代研发特点,形成的一套高效可落地的工程化方法。 本文结合OpenSpec这一主流SDD工具,从实操层面拆解SDD在复杂业务系统中的落地全流程,解答工具使用、流程设计、痛点解决等关键问题,帮助每一位开发者真正用好SDD,提升复杂系统研发效率与质量。 核心概念明确 SDD中的Spec(Specification,规格),本质是对业务需求、技术设计、实现细节的标准化描述,是整个研发流程的“唯一真理来源”。与传统

By Ne0inhk
把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

大家好,我是热爱探索AI前沿技术的LucianaiB。 前面我尝试了,感兴趣的可以才是部署一下试试 1.在 Windows 上部署 Openclaw:https://mp.weixin.qq.com/s/iF3ED1e649kkmdR26Y1xiw 2.把 Openclaw 接入到 Moltbook:https://mp.weixin.qq.com/s/QUrB50iwRGGdkl1LO-Tl8Q 相信很多技术爱好者都有这样的经历:趁着双十一或者大促,脑子一热买了一台腾讯云或者阿里云的服务器。买的时候雄心勃勃,想着要搭建博客、跑脚本、做图床。结果呢?大概率是跑了几个自动化签到脚本后,它就静静地躺在控制台里“吃灰”,每个月白白扣费。 但是在自己的电脑运行 Openclaw 无法做到24小时的在运行,于是我就想到了我有一个好久不用的腾讯云服务器,之前购买主要是跑一些自动化签到脚本,并没有实际做什么具体工作。于是我就想到把废弃的腾讯云服务器改为 Openclaw 的24小时的服务器。 于是,

By Ne0inhk
云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

引言:人工智能的未来——云平台的卓越突破 在当今科技飞速发展的时代,人工智能(AI)技术正深刻地改变着我们生活与工作方式的方方面面。作为AI领域的创新者与领航者,云平台始终走在技术前沿,凭借无穷的热情与智慧,致力于发掘AI的无限潜能,努力为全球用户描绘更加智能、高效、便捷的未来。 向阿里、腾讯等多家云平台也紧跟潮流推出最新力作——DeepSeek满血版。将为用户带来前所未有的体验革新。DeepSeek满血版的问世标志着云平台在AI技术征途上的一个新里程碑,推动行业迈向更加辉煌的未来。为了让更多的用户亲身感受这一革命性技术成果,云平台推出了免费Tokens的特权活动,让每一位用户都能够充分体验DeepSeek满血版的强大功能,并一同见证AI推理技术的突破性进展。 推荐阅读:Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力 技术创新与核心突破:DeepSeek满血版的飞跃 DeepSeek满血版是云平台在AI推理领域的重要突破,它是首个完全通过强化学习训练的大型语言模型。与传统的监督微调方式不同,DeepSeek满血版仅凭奖励信号便开发出了出色的推理

By Ne0inhk
商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 文章目录 * 商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 * 开场与团队介绍 (3分钟) * 第一部分:项目背景与政策支持 (8分钟) * 第二部分:项目目标与预期成果 (5分钟) * 第三部分:技能要点展示 (15分钟) * 第四部分:项目体系与人员分工 (8分钟) * 第五部分:创新点与独特之处 (10分钟) * 第六部分:情景演示与设备调试 (8分钟) * 第七部分:总结与致谢 (3分钟) 近期我们团队收到很多粉丝的后台留言请求,随着每年一届的“全国职业院校技能大赛”(以下称为国赛)升级为“世界职业院校技能大赛”(以下称为世校赛),那么由原先的围绕技术厂商的服务器端进行开展技能模块转变为了:三自主即自主确定参赛项目名称,自主设计参赛项目内容,自主选择参赛设备。赛制进行了一次重大级别的改革,很多参赛院校包括指导老师们对这种新模式的流程不熟悉,于是在后台给我们团队留言,希望我们能对新赛制的各个赛道出一些可以参考的资料,我们

By Ne0inhk