Qt容器类控件之QGroupBox与QTabWidget

Qt容器类控件之QGroupBox与QTabWidget

🌟🌟hello,各位读者大大们你们好呀🌟🌟

🚀🚀系列专栏:【Qt的学习】

📝📝本篇内容:容器类控件;QGroupBox;QTabWidget

⬆⬆⬆⬆上一篇:Qt多元素控件之QTreeWidget

💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.容器类控件

在我们前面讲的多元素控件,包含的内容是一个个自定义好的Item对象,而现在讲的容器类控件包含的内容是之前学过的控件,比如说QPushButton,QLineEdit等。当我们一个界面比较复杂的时候,包含了很多的控件的时候,分组框就可以把有关联的控件组织到一起

2.QGroupBox

QGroupBox是分组框,如上图,它可以设置一个标题,然后在内部添加控件,它基本上就是一个装饰作用,所以我们直接来看它的属性

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

我们直接来看实例,在之前我们写过一个点餐功能,使用了下拉列表和微调框,然后使用标签来分别表示是哪一部分,但是现在可以直接使用分组框来进行分组

照搬之前的写法就行,只是写到了QGroupBox中,但是要注意一个点,如果是进行复制分组框,一定要选择复制到QWidget中,否则就成了QGroupBox的子对象了。并且在我们分组框中的控件的父元素不再是Widget(也就是this)了,而是GroupBox

3.QTabWidget

接下来要讲的是标签页控件,它能够做到设置好几个标签页,并且可以往标签页里面添加控件,然后可以通过标签页来进行切换

接下来说一下它的一些常用函数

函数声明 函数说明
QTabWidget::TabPosition tabPosition() const 标签页所在的位置,North:上方,South:下方,West:左侧,East:右侧
int currentIndex() const 当前所在的标签页,从0开始算起
void setTabText(int index, const QString &label) 当前选中标签页的文本内容
bool tabsClosable() const 标签页是否可以关闭
void setTabsClosable(bool closeable) 设置标签页是否可以关闭
bool isMovable() const 标签页是否可以移动
void setMovable(bool movable) 设置标签页是否可以移动
void setTabIcon(int index, const QIcon &icon) 设置标签页的图标
int addTab(QWidget *page, const QString &label) 增加标签页
void removeTab(int index) 删除标签页
void setCurrentIndex(int index) 设置当前选中的标签页
信号声明 信号说明
void currentChanged(int index) 在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号
void tabBarClicked(int index) 在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号
void tabBarDoubleClicked(int index) 在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号
void tabCloseRequested(int index) 在标签⻚关闭时触发. 参数为被关闭的选项卡编号

接下来就是来使用它来实现一些功能,来熟悉这个控件

程序目标:创建一个标签页控件,默认只有一个标签页,然后再添加两个按钮,一个按钮用来增加标签页,一个按钮用来关闭当前选中的标签页,并且当我们切换标签页的时候也能感知到

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

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



void Widget::on_pushButton_new_clicked()
{
    //1.先创建一个Widget控件
    QWidget* w=new QWidget();
    //2.获取现在有几个Tab
    int num=ui->tabWidget->count();
    //3.添加到Tab中
    ui->tabWidget->addTab(w,QString("第")+QString::number(num+1)+QString("页"));
    //4.设置一个label
    QLabel* label=new QLabel(w);
    label->setText("这是第"+QString::number(num+1)+"页");
    label->resize(100,50);
    //5.设置新的标签页被选中
    ui->tabWidget->setCurrentIndex(num);
}

void Widget::on_pushButton_close_clicked()
{
     //1.先获取要关闭的标签页
    int pos=ui->tabWidget->currentIndex();
    if(pos<0)
    {
        return;
    }
    //2.关闭标签页
    ui->tabWidget->removeTab(pos);


}

这里主要的难点在于和之前不太一样,这里的创建标签页时需要先创建一个QWidget,可以把它理解为这是把标签页也当做一个窗口了,所以说需要一个QWidget

另外还要注意的就是上图画的,在我们创建标签页的时候还设置了一个label,它的父元素是QWidget
🌸🌸Qt容器类控件之QGroupBox与QTabWidget大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
cmpxr_24 分钟前
【C】局部变量和全局变量及同名情况
c语言·开发语言
hetao17338371 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
小碗羊肉1 小时前
【从零开始学Java | 第三十一篇下】Stream流
java·开发语言
汉克老师1 小时前
GESP2024年6月认证C++三级( 第二部分判断题(1-10))
c++·数组·位运算·补码·gesp三级·gesp3级
aq55356002 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
报错小能手2 小时前
ios开发方向——swift错误处理:do/try/catch、Result、throws
开发语言·学习·ios·swift
老歌老听老掉牙2 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt
无限进步_2 小时前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode
网域小星球2 小时前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目