[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);
}