【Qt控件之QTabWidget】介绍及使用
描述
QTabWidget类提供了一个带有选项卡的小部件堆栈。

选项卡小部件提供了一个选项卡栏(参见QTabBar)和一个“页面区域”,用于显示与每个选项卡相关联的页面。默认情况下,选项卡栏显示在页面区域的上方,但可以使用不同的配置(参见TabPosition)进行更改。每个选项卡与不同的小部件(称为页面)相关联。只有当前页面在页面区域中显示,其他所有页面都被隐藏。用户可以通过单击选项卡或按下其Alt+字母快捷键(如果有的话)来显示不同的页面。
使用方式
使用QTabWidget的常规方式如下:
- 创建一个
QTabWidget对象。 - 为选项卡对话框中的每个页面创建一个
QWidget,但不为它们指定父窗口小部件。 - 使用布局将子窗口小部件插入页面小部件,以正常的方式定位它们。
- 使用
addTab()或insertTab()将页面小部件放入选项卡窗口小部件中,并为每个选项卡提供适当的标签,可以选择性地添加键盘快捷键。
选项卡的位置由tabPosition定义,其形状由tabShape定义。
当用户选择一个页面时,将触发currentChanged()信号。
当前页面索引可通过currentIndex()获得,当前页面小部件可通过currentWidget()获得。您可以使用widget()检索具有给定索引的页面小部件,并可以使用indexOf()找到小部件的索引位置。使用setCurrentWidget()或setCurrentIndex()来显示特定页面。
您可以使用setTabText()或setTabIcon()更改选项卡的文本和图标。可以使用removeTab()删除选项卡及其相关页面。
每个选项卡在任何给定时间都可以启用或禁用(参见setTabEnabled())。如果选项卡启用,选项卡文本将以正常方式绘制,用户可以选择该选项卡。如果选项卡禁用,选项卡将以不同的方式绘制,用户无法选择该选项卡。
请注意,即使选项卡被禁用,页面仍然可以可见,例如,如果所有选项卡都恰好被禁用。
选项卡小部件可以很好地将复杂的对话框分割成多个部分。另一种选择是使用QStackedWidget,您可以为其提供一些导航方式,例如QToolBar或QListWidget。
QTabWidget中的大部分功能由QTabBar(位于顶部,提供选项卡)和QStackedWidget(大部分区域,组织个别页面)提供。
常用函数
枚举类型 QTabWidget::TabPosition
此枚举类型定义了 QTabWidget 绘制选项卡行的位置:
| 常量 | 值 | 描述 |
|---|---|---|
| QTabWidget::North | 0 | 选项卡绘制在页面上方。 |
| QTabWidget::South | 1 | 选项卡绘制在页面下方。 |
| QTabWidget::West | 2 | 选项卡绘制在页面左侧。 |
| QTabWidget::East | 3 | 选项卡绘制在页面右侧。 |
枚举类型 QTabWidget::TabShape
此枚举类型定义了选项卡的形状:
| 常量 | 值 | 描述 |
|---|---|---|
| QTabWidget::Rounded | 0 | 选项卡以圆角形状绘制。这是默认形状。 |
| QTabWidget::Triangular | 1 | 选项卡以三角形形状绘制。 |
成员函数介绍(部分):
-
addTab(QWidget *widget, const QString &label): 向QTabWidget中添加一个选项卡,关联指定的小部件和标签。 -
insertTab(int index, QWidget *widget, const QStringlabel): 在指定的位置插入一个选项卡,关联指定的小部件和标签。 -
removeTab(int index): 移除指定位置的选项卡及其关联的页面小部件。 -
setCurrentWidget(QWidget *widget): 设置当前显示的页面为指定的小部件。 -
setCurrentIndex(int index): 设置当前显示的页面为指定的索引位置。 -
currentWidget(): 返回当前显示的页面小部件。 -
currentIndex(): 返回当前显示页面的索引位置。 -
setTabText(int index, const QString &text): 修改指定索引位置的选项卡的文本。 -
setTabIcon(int index, const QIcon &icon): 修改指定索引位置的选项卡的图标。 -
setTabToolTip(int index, const QString &tooltip): 设置定索引位置的选项卡的工具提示。 -
setTabEnabled(int index, bool enabled): 设置指定索引位置的选项卡的启用状态。 -
count(): 返回选项卡的数量。 -
tabBar(): 返回QTabBar对象,用于访问和修改选项卡栏的属性和样式。 -
tabPosition(): 返回当前选项卡栏的位置。 -
tabShape(): 返回当前选项卡的形状。 -
tabText(int index): 返回指定索引位置的选项卡的文本。 -
tabIcon(int index): 返回指定索引位置的选卡的图标。
示例
UI效果:

#include <QApplication>
#include <QTabWidget>
#include <QPushButton>
#include <QIcon>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTabWidget tabWidget;// 添加按钮用于动态添加tabQPushButton addButton("Add Tab");QObject::connect(&addButton, &QPushButton::clicked, [&]() {static int index = 1;QString text = "Tab " + QString::number(index);QWidget *widget = new QWidget();tabWidget.addTab(widget, text); // 添加新的tabindex++;});// 插入按钮用于在当前tab之后插入新的tabQPushButton insertButton("Insert Tab");QObject::connect(&insertButton, &QPushButton::clicked, [&]() {static int index = 1;QString text = "Tab " + QString::number(index);QWidget *widget = new QWidget();int currentIndex = tabWidget.currentIndex();tabWidget.insertTab(currentIndex + 1, widget, text); // 插入新的tabindex++;});// 关闭按钮用于关闭当前选中的tabQPushButton closeButton("Close Tab");QObject::connect(&closeButton, &QPushButton::clicked, [&]() {int currentIndex = tabWidget.currentIndex();tabWidget.removeTab(currentIndex); // 关闭当前选中的tab});// 修改按钮用于改变当前选中tab的图标和文本QPushButton modifyButton("Modify Tab");QObject::connect(&modifyButton, &QPushButton::clicked, [&]() {int currentIndex = tabWidget.currentIndex();QIcon newIcon(":/newIcon.png");QString newText = "Modified Tab";tabWidget.setTabIcon(currentIndex, newIcon); // 修改当前选中tab的图标tabWidget.setTabText(currentIndex, newText); // 修改当前选中tab的文本});// 将按钮添加到QTabWidget中tabWidget.addTab(&addButton, "Add");tabWidget.addTab(&insertButton, "Insert");tabWidget.addTab(&closeButton, "Close");tabWidget.addTab(&modifyButton, "Modify");tabWidget.show();return app.exec();
}
示例创建了一个QTabWidget,并添加了4个按钮,用于实现动态添加tab、插入tab、关闭tab以及修改tab图标和文本的功能。可以根据实际需求更改按钮的样式和功能实现。
相关文章:
【Qt控件之QTabWidget】介绍及使用
描述 QTabWidget类提供了一个带有选项卡的小部件堆栈。 选项卡小部件提供了一个选项卡栏(参见QTabBar)和一个“页面区域”,用于显示与每个选项卡相关联的页面。默认情况下,选项卡栏显示在页面区域的上方,但可以使用…...
Linux实战——网络连接模式的三种模式
Linux可以分为三种网络模式: 桥接模式 (vmnet0) 仅主机模式 (vmnet1) NAT模式 (vmnet8) 当我们下载了vmware之后,在电脑会出现两个虚拟网卡,VMware Network Adapter VMnet1、VMware Network Adapter VMnet8。 可以通过查找 控…...
嵌入式实时操作系统的设计与开发(任意大小的内存管理)
任意大小的内存管理是根据用户需要为其分配内存,即用户需要多大内存就通过acoral_malloc2()为之分配多大内存,同时每块分配出去的内存前面都有一个控制块,控制块里记录了该块内存的大小。 同时未分配出去的内存也有一个控制块,寻…...
文件读取结束的判定
大家好啊,我们今天来补充文件操作的读取结束的判定。 被错误使用的feof 牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾…...
《基于 Vue 组件库 的 Webpack5 配置》9.module.exports 可为数组类型且注意编译顺序
module.exports常见是对象类型,其实也可用数组类型;注意编译顺序,从后往前 编: 也就是说先编 another.js,再编 index.js;所以代码第 9 行不能设置为 true,仅在第一次,也就是代码第19…...
CUDA学习笔记(四)device管理
本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/,仅用于学习。 device管理 NVIDIA提供了集中凡是来查询和管理GPU device,掌握GPU信息查询很重要,因为这可以帮助你设置kernel的执行配置。 本博文将主要介绍下面两方面内容&…...
【算法练习Day25】 重新安排行程N 皇后 解数独
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 重新安排行程N 皇后解数独总…...
软考-访问控制技术原理与应用
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 访问控制概念 访问控制是计算机安全的一个重要组成部分,用于控制用户或程序如…...
优测云测试平台 | 有效的单元测试
一、前言 本文作者提出了一种评价单元测试用例的质量的思路,即判断用例是否达到测试的“四大目标”。掌握识别好的用例的能力,可以帮助我们高效地写出高质量的测试用例。 评判冰箱的好坏,并不需要有制造一台冰箱的能力。在开始写测试用例之…...
Java设计模式之外观模式
定义 又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,…...
MyBatis实现延时加载的方式
MyBatis实现延时加载的方式有两种: 使用resultMap的association和collection标签配置延时加载:在查询语句中,使用association标签配置一对一关联关系,使用collection标签配置一对多关联关系。然后在查询结果映射的resultMap中配置…...
计算未来:微软眼中的人工智能
计算未来 :人工智能及其社会角色(The Future Computed. Artificial Intelligence and its role in society )这本书于2018年09月由北京大学出版社出版。 书籍的作者是:沈向洋(微软全球执行副总裁),(美&…...
字号和磅的对应关系
字号「八号」对应磅值5 字号「七号」对应磅值5.5 字号「小六」对应磅值6.5 字号「六号」对应磅值7.5 字号「小五」对应磅值9 字号「五号」对应磅值10.5 字号「小四」对应磅值12 字号「四号」对应磅值14 字号「小三」对应磅值15 字号「三号」对应磅值16 字号「小二」对应磅值18 …...
Bag of Tricks for Efficient Text Classification(FastText)
主要的有点就是快,用途就是用于文本分类,模型结构如上,主要是通过embedding将文本转换成向量,然后进行mean-pooling,然后输入到hidden隐向量中,通过softmax输出多分类,损失函数是对数似然损失函…...
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法 先看一下效果图(想在表单里动态的增删 form-item,然后添加rules,校验其必填项; ): html部分 <div v-for"(item, index) in …...
使用 ClickHouse 深入了解 Apache Parquet (一)
【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 自2013年作为Hadoop的列存储发布以来,Parquet几乎已经成为一种无处不在的文件交换格式,它提供了高效的存储和检索。这种采纳使其成为更近期的…...
【每周一测】Java阶段二第四周学习
目录 1、request中的getParameter(String name)方法的功能是 2、request中的getParameter(String name)方法的功能是 3、spring创建bean对象没有以下哪个方式 4、spring依赖注入中没有以下哪个方式 5、RequestParam、RequestBody、PathVariable的应用场景及区别 6、Cooki…...
系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构前言典型的微服务架构是什么样的微服务的优势 微服务最佳实践在开发微服务时,我们需要遵循以下最佳实践: 微服务通常使用什么技术堆栈…...
顺序表ArrayList
作者简介: zoro-1,目前大二,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 顺序表 概念Arraylist构造方法相关方法遍历操作 自…...
python软件安装技巧
安装软件时候加上源地址去安装,快速稳 pip install openni -ihttps://pypi.tuna.tsinghua.edu.cn/simple...
5分钟搭建Testsigma:零代码自动化测试的完整解决方案
5分钟搭建Testsigma:零代码自动化测试的完整解决方案 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality across…...
一台电脑变游戏派对:Nucleus Co-Op让你和好友共享屏幕乐趣
一台电脑变游戏派对:Nucleus Co-Op让你和好友共享屏幕乐趣 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想过和朋友一起坐…...
Ostrakon-VL开源大模型镜像一键部署全攻略
Ostrakon-VL开源大模型镜像一键部署全攻略 1. 引言:为什么选择Ostrakon-VL 最近开源大模型领域又添新成员,Ostrakon-VL以其出色的多模态理解能力吸引了不少开发者关注。这个模型不仅能处理文本,还能理解图片内容,在智能客服、内…...
云计算Linux——基础操作命令(一)
前言在当今的技术环境中,高效的工具选择对开发者和系统管理员至关重要。Linux作为一个强大的开源操作系统,以其稳定性、灵活性和丰富的命令行生态著称,尤其适用于服务器管理、开发环境搭建及自动化任务处理。与此同时,MobaXterm P…...
别再傻傻分不清了!BIOS里的SCI、SMI和IRQ到底有啥区别?用大白话给你讲明白
BIOS中的SCI、SMI和IRQ:用生活场景理解计算机中断机制 刚接触计算机底层开发的朋友,第一次看到BIOS设置里那些晦涩的缩写——SCI、SMI、IRQ,是不是感觉头都大了?别担心,今天我们就用最生活化的例子,帮你彻底…...
从面试官视角看CV:那些年我们踩过的OCR面试坑,附CRNN/DB/CTPN高频考点解析
深度学习CV面试实战:OCR方向高频考点与策略精析 当ChatGPT重构了人机交互范式,AIGC技术正以每周一个里程碑的速度刷新行业认知。在这个算法工程师内卷加剧的时代,掌握OCR技术体系早已不是加分项,而是计算机视觉领域求职者的生存技…...
AdSense新手必看:W-8BEN表格保姆级填写指南,避开那些让你审核卡壳的坑
AdSense税务合规全攻略:W-8BEN表格填写避坑手册 第一次在AdSense后台看到W-8BEN表格时,我盯着满屏的英文术语和税务选项足足发呆了十分钟——这简直比读懂服务器错误日志还令人头疼。作为非美国税务居民,正确填写这份表格直接关系到能否顺利收…...
04.1.CUDA安装避坑指南:从版本选择到C盘空间保卫战
1. 为什么你的C盘总是被CUDA悄悄占满? 每次装完CUDA发现C盘莫名其妙少了几个G,这大概是深度学习开发者最头疼的问题之一。我刚开始玩AI那会儿,装完CUDA 11.7后C盘直接飙红,系统弹窗疯狂报警,最后不得不重装系统。后来…...
告别MyBatis的‘?‘占位符:用p6spy 3.9.1在Spring Boot里打印可直接执行的SQL(附自定义日志格式)
告别MyBatis的?占位符:用p6spy 3.9.1在Spring Boot里打印可直接执行的SQL(附自定义日志格式) 调试SQL语句是Java开发中的日常操作,但MyBatis和JPA等ORM框架输出的预编译SQL总带着恼人的?占位符。每次排查问题时,开发…...
04华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第9期 第4题」室内行人移动方位推算技术工程化全解
华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第9期 第4题」 GPS屏蔽/弱信号环境室内行人移动方位精准推算技术工程化全解 ——双路径解题架构全场景量化性能对比 一、摘要 本题为华为鸿蒙全场景生态室内定位领域顶级卡脖子技术难题,针对地下车库、商…...
