15.QT-容器类控件|Group Box|Tab Widget|垂直布局|水平布局|网格布局|表单布局|Spacer(C++)

Group Box

使⽤ QGroupBox 实现⼀个带有标题的分组框.可以把其他的控件放到⾥⾯作为⼀组.这样看起来能更好看⼀点.
注意,不要把 QGroupBox 和 QButtonGroup 混淆.(之前在介绍 QRadionButton的时候提到了 QButtonGroup ).
![[Pasted image 20250422092535.png]]

核⼼属性

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

分组框只是⼀个⽤来"美化界⾯"这样的组件,并不涉及到⽤⼾交互和业务逻辑.属于"锦上添花"

代码⽰例:给⻨当劳案例加上分组框

1)在界⾯上创建三个分组框,并且在分组框内部创建下拉框和微调框.
![[Pasted image 20250422093400.png]]

在复制粘贴控件的时候,⼀定要先选中对应的⽗控件,再粘贴.
2)编写widget.cpp,添加初始化下拉框的代码

Tab Widget

使⽤ QTabWidget 实现⼀个带有标签⻚的控件,可以往⾥⾯添加⼀些widget.进⼀步的就可以通过标签⻚来切换

核⼼属性

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

核⼼信号

属性 说明
currentChanged(int) 在标签⻚发⽣切换时触发,参数为被点击的选项卡编号.
tabBarClicked(int) 在点击选项卡的标签条的时候触发.参数为被点击的选项卡编号.
tabBarDoubleClicked(int) 在双击选项卡的标签条的时候触发.参数为被点击的选项卡编号.
tabCloseRequest(int) 在标签⻚关闭时触发.参数为被关闭的选项卡编号.
代码⽰例:使⽤标签⻚管理多组控件

1)在界⾯上创建⼀个 QTabWidget ,和两个按钮.
按钮的 objectName 为 pushButton_add 和 pushButton_remove
![[Pasted image 20250422104532.png]]

  • QTabWidget 中的每个标签⻚都是⼀个 QWidget
  • 点击标签⻚,就可以直接切换.
  • 右键 QTabWidget ,可以添加标签⻚或者删除标签⻚.
    2)编写widget.cpp,进⾏初始化,给标签⻚中放个简单的label
  • 注意新创建的label的⽗元素,是 ui->tab 和 ui->tab_2 .Qt中使⽤⽗⼦关系决定该控件"在哪⾥".
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
  
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
  
    //在每个标签页中添加一个label
    QLabel* label1 = new QLabel(ui->tab);
    label1->setText("标签页1");
    label1->resize(100, 50);
  
    QLabel* label2 = new QLabel(ui->tab_2);
    label2->setText("标签页2");
    label2->resize(100, 50);
}

![[Pasted image 20250422113806.png]]

3)编写按钮的slot函数

  • 使⽤ count() 获取到标签⻚的个数.
  • 使⽤ addTab 新增标签⻚.
  • 使⽤ removeTab 删除标签⻚.
  • 使⽤ currentIndex 获取到当前标签⻚的下标.
  • 使⽤ setCurrentIndex 切换当前标签⻚.
void Widget::on_pushButton_add_clicked()
{
    //使用addTab方法创建新的标签页
    //参数1指定一个QWidget,
    //参数2指定一个标签页的text(标题),此处标题是Tab+数字
    int count = ui->tabWidget->count(); //获取到标签页的数量
    QWidget* w = new QWidget();
    ui->tabWidget->addTab(w, QString("Tab ") + QString::number(count + 1));
    //添加Qlabel显示内容
    QLabel* label = new QLabel(w);
    label->setText(QString("标签页 ") + QString::number(count + 1));
    label->resize(100, 50);
    //设置新标签页被选中
    ui->tabWidget->setCurrentIndex(count);
}
  
void Widget::on_pushButton_remove_clicked()
{
    //拿到选中标签页的下标
    int index = ui->tabWidget->currentIndex();
    //删除标签页
    ui->tabWidget->removeTab(index);
}
  
void Widget::on_tabWidget_currentChanged(int index)
{
    qDebug() << "当前选中的标签页是: " << in
虽然给定引用中未直接提及Qt水平布局控件无法垂直居中的解决办法,但可以结合相关布局知识给出以下可能的解决方案: ### 使用布局属性 在Qt中,布局管理器提供了一些属性来控制控件的对齐方式。对于水平布局(`QHBoxLayout`),可以通过设置布局的对齐方式来实现控件垂直居中。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton app = QApplication(sys.argv) window = QWidget() layout = QHBoxLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") # 设置布局的对齐方式为垂直居中 layout.setAlignment(Qt.AlignVCenter) layout.addWidget(button1) layout.addWidget(button2) window.setLayout(layout) window.show() sys.exit(app.exec_()) ``` ### 使用间隔项 可以使用`QSpacerItem`类在布局中创建灵活的空白空间,辅助实现控件垂直居中。`QSpacerItem`可用于在水平垂直布局中调整控件的位置和对齐方式[^1]。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QSpacerItem, QSizePolicy app = QApplication(sys.argv) window = QWidget() layout = QHBoxLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") # 创建垂直间隔项 spacer_top = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) spacer_bottom = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) layout.addSpacerItem(spacer_top) layout.addWidget(button1) layout.addWidget(button2) layout.addSpacerItem(spacer_bottom) window.setLayout(layout) window.show() sys.exit(app.exec_()) ``` ### 设置控件属性 有些控件本身有属性可以设置对齐方式,也可以尝试设置控件的对齐属性来实现垂直居中。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton from PyQt5.QtCore import Qt app = QApplication(sys.argv) window = QWidget() layout = QHBoxLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") # 设置控件的对齐方式为垂直居中 button1.setAlignment(Qt.AlignVCenter) button2.setAlignment(Qt.AlignVCenter) layout.addWidget(button1) layout.addWidget(button2) window.setLayout(layout) window.show() sys.exit(app.exec_()) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值