使⽤
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
注意,• QTabWidget 中的每个标签⻚都是⼀个 QWidget• 点击标签⻚, 就可以直接切换.• 右键 QTabWidget , 可以添加标签⻚或者删除标签⻚.
2) 编写 widget.cpp, 进⾏初始化, 给标签⻚中放个简单的 label
•
注意新创建的 label 的⽗元素, 是 ui->tab
和
ui->tab_2
. Qt 中使⽤⽗⼦关系决定该控件 "在
哪⾥".

3) 编写按钮的 slot 函数
•
使⽤ count()
获取到标签⻚的个数.
•
使⽤ addTab
新增标签⻚.
•
使⽤ removeTab
删除标签⻚.
•
使⽤ currentIndex
获取到当前标签⻚的下标.
•
使⽤ setCurrentIndex
切换当前标签⻚.




4) 编写
QTabWidget
的
currentChanged
函数



5) 运⾏程序, 观察效果
•
点击新建标签⻚, 可以创建出新的标签.
•
点击删除当前标签⻚, 可以删除标签.
•
切换标签⻚时, 可以看到 qDebug 打印出的标签⻚编号.



第一个标签页,name叫做"tab"
此时代码中就可以通过ui->tab方式来访问到这个标签页
#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);
label2->setText("标签页2");
label2->resize(100, 50);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_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::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;
}