容器类控件TabWidget
使用TabWidget实现一个带有标签页的控件,可以在里面添加一些widget,通过标签页来进行切换。
- 核心属性
属性 | 说明 |
---|---|
tabPosition | 标签⻚所在的位置.
|
currentIndex | 当前选中了第⼏个标签⻚ (从 0 开始计算) |
currentTabText | 当前选中的标签⻚的⽂本 |
currentTabName | 当前选中的标签⻚的名字 |
currentTabIcon | 当前选中的标签⻚的图标 |
currentTabToolTip | 当前选中的标签⻚的提⽰信息 |
tabsCloseable | 标签⻚是否可以关闭 |
movable | 标签⻚是否可以移动 |
- 核心信号
信号 | 说明 |
currentChanged(int) | 在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号 |
tabBarClicked(int) | 在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号 |
tabBarDoubleClicked(int) | 在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号 |
tabCloseRequest(int) | 在标签⻚关闭时触发. 参数为被关闭的选项卡编号. |
例子:使用标签页管理多组控件
创建一个程序,带有一个TabWidget作为标签页;
提供俩个按钮,分别用于创建新的标签页,关闭当前选中的标签页;
当切换标签页的时候,也能感知到变化。
(1)设置一个QTabWidget标签页,俩个按钮
(2)在俩个标签页中使用代码初始化俩个label
注意新创建的 label 的⽗元素, 是 ui->tab 和 ui->tab_2 . Qt 中使⽤⽗⼦关系决定该控件 "在
哪⾥".
(3)编写按钮的slot函数
- 使⽤ count() 获取到标签⻚的个数.
- 使⽤ addTab 新增标签⻚.
- 使⽤ removeTab 删除标签⻚.
- 使⽤ currentIndex 获取到当前标签⻚的下标.
- 使⽤ setCurrentIndex 切换当前标签⻚.
(4)编写 QTabWidget 的 currentChanged 函数
(5)执行程序
(6)代码展示
#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
#include<QDebug>
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);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
// 获取当前存在标签页的个数
int count = ui->tabWidget->count();
// 创建新的widget
QWidget* widget = new QWidget;
// 设置新的标签页
ui->tabWidget->addTab(widget, QString("tab") + QString::number(count + 1));
// 在标签页中设置新的label
QLabel* label = new QLabel(widget);
label->setText(QString("标签页 ") + QString::number(count + 1));
label->resize(100, 50);
// 选中当前设置的标签页
ui->tabWidget->setCurrentIndex(count);
}
void Widget::on_pushButton_2_clicked()
{
// 获取选中的当前页的下标
int index = ui->tabWidget->currentIndex();
// 删除选中页
ui->tabWidget->removeTab(index);
}
void Widget::on_tabWidget_currentChanged(int index)
{
qDebug() << "当前的标签页为 " << index;
}