在 Qt 中,QTabWidget
是一个常用的控件,用于在一个窗口或对话框中创建多个选项卡。每个选项卡可以包含不同的内容,用户可以通过点击选项卡来切换显示不同的内容。
接下来让我们看看QTabWidget的具体用法:
一.创建QTabWidget对象
创建项目的时候,要包含头文件#include <QTabWidget>,然后创建该控件对象。
QTabWidget* pTabWidget = new QTabWidget(this);
二.往QTabWidget中添加选项卡
QHBoxLayout* Lay = new QHBoxLayout(this);
QWidget* w1 = new QWidget;
w1->setStyleSheet("background-color:rgb(45,45,45)");
QWidget* w2 = new QWidget;
w2->setStyleSheet("background-color:rgb(45,145,145)");
QWidget* w3 = new QWidget;
w3->setStyleSheet("background-color:rgb(225,225,0)");
//将几个QWidget添加到QTabWidget当中去
pTabWidget->insertTab(0,w1,"tab1");
pTabWidget->insertTab(1,w2,"tab2");
pTabWidget->insertTab(2,w3,"tab3");
Lay->addWidget(pTabWidget);
这里设置了三个选项卡。运行后得效果如下图所示。
注意要写布局,并且要将QTabWidget对象添加到该布局当中去。否者选项卡就不能够正确的的显示。另外还要介绍的是QTabWidget中的insertTab函数。
//--------------------------------------------insertTab函数-----------------------------------------------------------------
QTabWidget::insertTab()
函数是用于在 QTabWidget 中插入一个新的标签页的方法。这个函数有多个重载版本,但是最常用的版本通常包含以下参数:
- index:要插入标签页的位置索引。如果索引为 -1,则表示在最后插入一个新标签页。
- widget:要插入的 QWidget 对象,作为新标签页的内容。
- icon:可选参数,表示要显示在标签页标签上的图标。
- label:标签页的显示文本。
这个函数允许你动态地向 QTabWidget 中添加标签页,并指定标签页的内容、图标和显示文本。它是使用标签页的一种常见方式,通常与 addTab()
函数一起使用,但与 addTab()
不同的是,insertTab()
允许你在指定的位置插入标签页,而不是将其添加到末尾。
下面是示例代码:
QTabWidget* tabWidget = new QTabWidget(this);
QHBoxLayout *layout = new QHBoxLayout(this);
// 创建标签页的内容
QWidget* page1 = new QWidget;
QWidget* page2 = new QWidget;
// 向标签页中插入内容
tabWidget->insertTab(0, page1, QIcon(":/images/icon1.png"), "Page 1");
tabWidget->insertTab(1, page2, QIcon(":/images/icon2.png"), "Page 2");
// 将标签页添加到布局中
layout->addWidget(tabWidget);
//-----------------------------------------------------------------------------------------------------------------------------
三. QTabWidget中涉及到的一些信号
-
currentChanged(int index)
: 当前选中的选项卡发生改变时触发。参数index
表示当前选中的选项卡的索引。 -
tabBarClicked(int index)
: 当用户点击选项卡栏上的任意选项卡时触发。参数index
表示被点击的选项卡的索引。 -
tabCloseRequested(int index)
: 当用户尝试关闭一个选项卡时触发。参数index
表示将要关闭的选项卡的索引。 -
tabBarDoubleClicked(int index)
: 当用户双击选项卡栏上的任意选项卡时触发。 -
currentIndexChanged(int index)
: 当前选中的选项卡索引发生变化时触发,无论是由用户操作还是程序调用导致的变化。
这些信号可以让你在应用程序中响应用户的操作,比如根据选项卡的切换更新界面内容,处理选项卡的关闭操作等。
大家可以写一些测试函数,来测试这些信号的可用性。
connect(pTabWidget,&QTabWidget::currentChanged,this,&Widget::currentChanged);
void Widget:: currentChanged(int index){
qDebug()<<"currentChanged index ="<<index;
}
这是其中的一个信号。可以在切换选项卡面的时候输出当前选项卡面的索引。如下图:
从第一张切换到了第二张,第二张所在索引在1,输出是1。
四.关闭单个的标签页
QTabWidget* pTabWidget = new QTabWidget(this);
pTabWidget->setTabsClosable(true);
效果如下图所示:
通过调用 setTabsClosable(true)
方法,你可以启用关闭按钮,并允许用户关闭标签页,这里具体功能还没有实现,要实现的话得使用信号与槽函数。
这里我们就将标签页1关闭了。
connect(pTabWidget,&QTabWidget::tabCloseRequested,this,&Widget::removeTab1);
点击标签页的❌号会触发QTabWidget里的tabCloseRequested信号,这个信号会传递点击的标签页的索引,我们编写槽函数使用removeTab(index)函数将标签页关闭就好。
五.实现标签页的移动
使用的函数为:
pTabWidget->setMovable(true);
实现的效果是:
六.标签的位置的改变
使用的函数为:
pTabWidget->setTabPosition(QTabWidget::West);
方位一共有4个:
enum TabPosition { North, South, West, East };
实现的效果是:
七.标签的形状的改变
使用的函数为:
pTabWidget->setTabShape(QTabWidget::Triangular);
形状一共有4个:
enum TabShape { Rounded, Triangular }
实现的效果是: