[Qt]常用控件介绍-容器类控件-QGroupBox、QTabWidget

目录

1.容器类控件介绍

2.GroupBox控件

核心属性

3.QTableWidget

核心属性

核心信号

细节

使用案例


1.容器类控件介绍

        容器类控件指的是一个控件里面包含了多个我们之间学过的那种对象,而多元素控件则是,一个控件中是由多个Item对象构成的。对于容器类控件内部的控件,这些内部的控件的父元素就不在是this了,而是这些容器类控件了。

2.GroupBox控件

        该控件是一个带有标题的分组框。这个控件只是为了让界面看起来好看一些,当一个界面比较复杂的时候,会包含很多个控件,分组框就可以把具有关联关系的控件,组织在一起。

核心属性
属性说明
title分组框的标题
alignment内部内容的对齐方式
flat是否是扁平模式
checkable

是否可以选中

为true的时候,title前面会多一个可勾选的部分

checked

描述分组框的选中状态,但前提是checkable为true

如果说设置该状态后,如果不选中的话,内部控件不能进行操作

3.QTableWidget

        该控件是一个带有标签页的控件

核心属性
属性说明
tabPosition

标签页所在的方位

North上方,South下方,West左侧,East右侧

currentIndex当前选中了第几个标签页(从0开始计算)
currentTabText当前选中的标签页的文本
currentTabName当前选中的标签页的名字
currentTabIcon当前选中的标签页的图标
currentTabToolTip当前选中的标签页的提示信息
tabsCloseable标签页是否可以关闭
moveable标签页是否可以移动
核心信号
信号说明
currentChanged(int)在标签页发生切换时候触发,参数为选项卡的编号
tabBarCkicked(int)在点击选项卡标签页的时候触发
tabBarDoubleClicked(int)在双击选项卡标签页的时候触发
tabCloseRequest(int)在标签页关闭的时候触发
细节
  • 对于TabWidget内部的每一个标签页都是一个QWidget,所以我们如果在代码中添加标签页内部的控件的时候,需要将对象挂载到标签页的对象树上,每一个标签页也是有名字的,可以通过ui->xxxx访问的到。也是相当于指明了控件创建到那个标签页当中了。
  • addTab、removeTab分别是添加和删除标签页的函数,addTab的参数有两个,第一个是要传入的QWidget对象,第二个是标签页的名称,removeTab则简单,直接传入标签页的下标即可。
  • 对于新增标签页的时候,也不需要将标签页挂载到对象树上,也是该QTableWidget释放的时候,会调用析构函数,将所有标签页QWidget对象释放的。
  • 对于tableCloseable属性,如果为true的话,会在标签页名称的后面带有一个关闭按键,但这里并不是真正的关闭,而是会发出tabCloseRequest信号,具体怎么处理,需要我们自己去定义。
使用案例

        使用两个按钮来控制该控件的增加和删除标签页

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //初始化标签页
    QLabel *label1 = new QLabel(ui->tab);
    label1->setText("这是标签页1");
    label1->resize(200, 100);

    QLabel *label2 = new QLabel(ui->tab_2);
    label2->setText("这是标签页2");
    label2->resize(200, 100);
}

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

//添加标签页
void Widget::on_pushButton_clicked()
{
    //获取标签页数量
    int count = ui->tabWidget->count();
    //创建标签页对象
    QWidget* tab = new QWidget();
    ui->tabWidget->addTab(tab, QString("Tab ") + QString::number(count + 1));
    //并选中这个新的标签页
    ui->tabWidget->setCurrentIndex(count);
}

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

<think>嗯,用户想了解Qt框架中的常用控件及其用法,还提到了总结文档和教程。首先,我需要整理Qt中常见的控件,比如按钮、输入框、容器等。根据提供的引用,用户可能已经看过一些资料,但需要更系统的总结。 先看看引用里的内容。引用[1]和[3]提到了QPushButton、QLineEdit、QComboBox等控件,还有信号槽的用法。引用[2]提到了焦点策略。可能需要将这些控件分类,比如输入类、按钮类、容器类等,这样结构更清晰。 用户可能需要每个控件的简要说明和示例代码。比如QPushButton的创建和点击事件处理,如何在Qt Creator中使用设计器布局。此外,信号与槽的连接是关键,特别是lambda表达式的使用,这在引用[3]的代码示例中出现过。 还要考虑用户可能遇到的常见问题,比如控件的焦点设置、布局管理,或者如何获取输入内容。例如,QLineEdit的text()方法,QSpinBox的值获取等。 另外,用户可能想知道相关教程或文档资源,需要推荐官方文档和书籍。比如《Qt Creator快速入门》和《C++ GUI Programming with Qt 4》,以及Qt Assistant工具的使用。 在组织内容时,先分大类,再逐个介绍控件,每个控件给出代码示例和注意事项。比如QRadioButton和QCheckBox的区别,QComboBox的添加项方法,布局管理中的QHBoxLayout和QVBoxLayout的应用。 最后,生成相关问题时要覆盖控件选择、布局管理、信号槽连接、焦点策略和输入验证等方面,帮助用户进一步深入学习。</think>### Qt常用控件总结及使用指南 #### 一、核心控件分类 1. **按钮类控件** - $QPushButton$: 标准按钮控件,支持点击事件绑定 - $QRadioButton$: 单选按钮(需配合QButtonGroup使用) - $QCheckBox$: 复选框支持多选 ```cpp connect(ui->pushButton, &QPushButton::clicked, [=](){ qDebug() << "按钮被点击"; }); ``` 2. **输入类控件** - $QLineEdit$: 单行文本输入框 - $QTextEdit$: 富文本编辑器 - $QSpinBox$: 数字输入框(整数) ```cpp QString text = ui->lineEdit->text(); // 获取输入内容 ``` 3. **容器类控件** - $QGroupBox$: 分组容器 - $QTabWidget$: 选项卡容器 - $QScrollArea$: 滚动区域容器 4. **显示类控件** - $QLabel$: 文本/图片显示 - $QProgressBar$: 进度条 - $QLCDNumber$: 数字显示屏 #### 二、关键功能实现 1. **信号与槽机制** ```cpp // Lambda表达式连接示例 connect(ui->checkBox, &QCheckBox::stateChanged, [=](int state){ qDebug() << "复选框状态:" << state; }); ``` 2. **布局管理** ```cpp QHBoxLayout *hLayout = new QHBoxLayout; hLayout->addWidget(ui->pushButton); hLayout->addWidget(ui->lineEdit); ``` 3. **焦点控制** ```cpp ui->lineEdit->setFocusPolicy(Qt::StrongFocus); // 设置焦点策略[^2] ``` #### 三、推荐学习资源 1. 官方文档:Qt Widgets模块文档 2. 书籍推荐: -Qt Creator快速入门》 -C++ GUI Programming with Qt 4》 3. 开发工具: - 使用Qt Assistant查看控件类说明 - 通过Qt Designer进行可视化布局 #### 四、最佳实践建议 1. 使用UI文件分离界面与逻辑 2. 优先使用布局管理器而非绝对坐标 3. 对输入控件添加验证逻辑 ```cpp QValidator *validator = new QIntValidator(0, 100, this); ui->lineEdit->setValidator(validator); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值