简述
QTabWidget类提供了选项卡式的窗口控件。
功能详述
选项卡小部件提供了一个选项卡栏(请参阅QTabBar)和一个“页面区域”,该页面区域用于显示与每个选项卡相关的页面。默认情况下,选项卡栏显示在页面区域上方,但是可以使用不同的配置(请参见TabPosition)。每个选项卡都与一个不同的窗口小部件(称为页面)相关联。页面区域中仅显示当前页面。其他所有页面均被隐藏。用户可以通过单击其选项卡或按Alt +字母快捷键(如果有的话)来显示其他页面。
使用QTabWidget的正常方法是执行以下操作:
- 创建一个QTabWidget。
- 为每一个标签页创建一个QWidget作为页控件,但不要为它们指定父类。
- 向页控件中插入子控件,使用使用布局工具来对它们进行布局。
- 调用addTab()或者insertTab()将页控件插入标签控件,并为每一个标签分配一个标签字符串,快捷键可加可不加。
tabPosition和tabShape分别用于定义标签的位置和形状。
当用户选择一个页面的时候,currentChanged信号会被发出
currentIndex()和currentWidget()分别用于获取当前页面的页号和当前页控件。可以通过widget()获取当前页面控件的指针。setCurrentWidget或者setCurrentIndex可以用来展示特定的页面。
使用setTabText和setTabIcon来改变标签文本和icon。使用removeTab来移除标签页。
使用setTabEnabled来使能或者失能特定的标签页。
在分离复杂对话框上,QTabWidget是一个非常好的选择。另一个可替代的选择是在QStackedWidget加上页面导航功能,例如QToolBar或者QListWidget。
QTabWidget的大多数功能由一个QTabBar和一个QStackedWidget提供。
使用
效果

上图是Qt creator中某个页面的效果。可以作为设计参考。

这是一个带有三个空页面的标签控件示例,用于展示QTabWidget的基本用法。
源码
QTabWidget *tabWidget = new QTabWidget;
tabWidget->setTabShape(QTabWidget::Triangular);
tabWidget->setTabPosition(QTabWidget::West);
QWidget *pageWidget_0 = new QWidget;
QWidget *pageWidget_1 = new QWidget;
QWidget *pageWidget_2 = new QWidget;
tabWidget->addTab(pageWidget_0, "第一页");
tabWidget->addTab(pageWidget_1, "第二页");
tabWidget->addTab(pageWidget_2, "第三页");
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(tabWidget);
this->setLayout(gridLayout);
this->resize(500, 300);
常用设置
添加控件
使用addTab和insertTab来添加控件,有两个版本,一个带图例,一个不带,如下所示。
tabWidget->addTab(pageWidget_0, "第一页");
tabWidget->addTab(pageWidget_0, QICon(":/picture/qq.png"), "第一页");
tabWidget->insertTab(1, pageWidget_0, "第一页");
tabWidget->insertTab(1, pageWidget_0, QICon(":/picture/qq.png"), "第一页");
移除控件
用removeTab来移除控件
tabWidget->removeTab(1);
设置标签可移动
tabWidget->setMovable(true);
效果

设置标签页自动隐藏
当标签控件的标签小于2的时候,标签会被隐藏。
tabWidget->setTabBarAutoHide(true);
效果

设置标签位置
tabWidget->setTabPosition(QTabWidget::North)
枚举:QTabWidget::TabPosition
常量 | 值 | 描述 |
---|---|---|
QTabWidget::North | 0 | 标签显示在页面上方 |
QTabWidget::South | 1 | 标签显示在页面下方 |
QTabWidget::West | 2 | 标签显示在页面左边 |
QTabWidget::East | 3 | 标签显示在页面右边 |
效果

设置标签形状
tabWidget->setTabShape(QTabWidget::Triangular);
效果

为控件设置关闭按钮以及用户滚轮
tabWidget->setClosable(true);
tabWidget->setUsersScrollButtons(true);
效果

信号槽
槽
名称 | 描述 |
---|---|
setCurrentIndex(int index) | 设置索引为index的控件为当前控件 |
setCurrentWidget(QWidget *widget) | 设置控件widget为当前控件 |
信号
名称 | 描述 |
---|---|
currentChanged(int index) | 当前标签改变,index为改变后的标签索引 |
tabBarClicked(int index) | 标签被点击,index为被点击标签的索引 |
tabBarDoubleClicked(int index) | 标签被双击,index为被双击标签的索引 |
tabCloseRequested(int index) | 标签关闭按钮被点击,index为被点击标签的索引 |
引用
[1] Qt助手