QTabWidget 类 (选项卡部件)

news2025/1/1 9:35:19

1、 QTabWidget 类直接继承自 QWidget。该类提供了一个选项卡栏(QTabBar)一个相应的页
面区域
,用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同,只有
当前页面(即可见页面)是可见的,所有其他页面都不可见,用户可通过选择不同的选项卡

来显示其对应的其他页面。
2、页面或页面部件:其实就是容器(通常使用 QWidget 创建)
3、 QTabWidget 类,是一个实现多页面切换的类,该类已经实现了多页面切换的部分功能,
只需再对其进行少量的设计(主要是要设计页面中的内容)便可实现多页面切换了。 因此,
使用该类实现多页面切换时,就不需要再使用 QStackedLayout 布局把页面与选项卡相关
联,也不需要使用类似 QVBoxLayout 的布局把选项卡和页面放置在一起。
4、 QTabWidget 类的大部分功能由 QTabBar(主要处理选项卡部分)和 QStackedWidget(主要处
理组织页面的功能)提供。


5、 使用 QTabWidget 的步骤为:
①、 创建一个 QTabWidget。
②、 为每个选项卡创建一个页面(容器),通常为 QWidget(不要指定父部件)。
③、 把子部件插入到页面部件(即容器)中。
④、 使用 addTab()或 insertTab()把页面部件放入选项卡部件。
⑤、下面为大致代码
QTabWidget pt; //选项卡部件
QWidget *pw, *pw1, *pw2….; //创建容器。
……….. //向容器中添加需要显示的内容,略。
pt.addTab(pw,"AAA"); //把容器 pw 作为选项卡 AAA 的页面。
pt.addTab(pw,"BBB"); //把容器 pw1 作为选项卡 BBB 的页面。
…….
⑥、 注:若容器中的内容不可见,则使用 resize()函数设置 QTabWidget 的大小使其可见

6、 QTabWidget 类中的属性和函数大多与 QTabBar 中的属性和函数是相同的,对于相同的属
性和函数此处仅列出,只讲解不相同的属性和函数。

7、 QTabWidget 类中的属性

QTabWidget 类属性
该表中的属于与 QTabBar 中的属性相同,请参阅 QTabBar 类的讲解
属性名说明属性名说明
count获取选项卡的数量documentMode是否以适合文档页面的模式呈现
movable选项卡是否可移动currentIndex获取和设置当前选项卡
elideMode选项卡中文本的省略方式tabsClosable是否显示选项卡上的关闭按钮
iconSize选项卡栏中的图标大小usesScrollButtons是否使用滚动按钮

①、 tabBarAutoHide: bool //qt5.4
访问函数: bool tabBarAutoHide(); void setTabBarAutoHide(bool);
若为 true,则当选项卡只有 1 个时,会自动隐藏,默认为 false。该属性对应于 QTabBar
的 autoHide 属性。
②、 tabPosition: TabPosition
访问函数: TabPosition tabPosition()const; void setTabPosition(TabPosition);
获取或设置选项卡的位置(即选项卡位于上、下、左、右)。默认为 North(即上)。

TabPosition 枚举见下表

QTabWidget::TabPosition 枚举(无标志)
作用:描述选项卡的位置
成员说明成员说明
QTabWidget::North0北面(即上面)QTabWidget::West2西面(即左侧)
QTabWidget::South1南面(即下面)QTabWidget::East3东面即右侧)

③、 tabShape: TabShape 访问函数: TabShape tabShape() const; void setTabShape(TabShape);
此属性描述选项卡的形状,该属性对应于 QTabBar 的 shape 属性,其外观可参阅该类

QTabWidget::TabShape 枚举(无标志)
作用:描述选项卡的形状
成员说明成员说明
QTabWidget::Rounded0圆形外观(默认)QTabWidget::Triangular2三角形外观

7、 QTabWidget 类中的函数
①、 QTabWidget(QWidget* parent = Q_NULLPTR); //构造函数
②、 int addTab(QWidget* page, const QString &label);
int addTab(QWidget* page, const QIcon &icon, const QString &label);
int insert(int index, QWidget* page, const QString &label);
int insert(int index, QWidget* page, const QIcon &icon, const QString &label);
 以上函数表示,把页面部件 page 和具有文本 label 和(或)图标 icon 的选项卡添加
到 QTabWidget 部件的末尾
插入到索引 index 处,并返回选项卡栏上该选项卡的
索引。
 其中 label 和 icon 会成为选项卡的文本和图标。
 可在 label 的文本中使用&符号为选项卡设置快捷键。
 若在小于或等于当前选项卡索引的索引处插入一个新选项卡,将使当前选项卡的
索引号增加,但当前选项卡保持不变。
 若以上函数在 show()之后调用,则可能会导致闪烁现象。
③、 void clear();
移除所有页面,但不删除它们。调用此函数相当于调用 removeTab()函数直到选项卡部
件为空。
④、 void removeTab(int index); //移除索引 index 处的选项卡,页面不会被删除。

⑤、 int indexOf(QWidget* w) const; //返回部件 w 的索引位置,若没有该部件则返回-1
⑥、 QWidget* widget(int index) const; //返回索引 index 处的页面部件。
⑦、 QWidget* currentWidget() const; //返回指向当前页面部件的指针。

void setCurrentWidget(QWidget* widget);//槽,把 widget 设置为当前页面(可见页面)。

⑧、 QTabBar* tabBar() const;void setTabBar(QTabBar* tb);    //返回当前的 QTabBar。//受保护的。

使用 tb 替换选项卡部件的 QTabBar 选项卡栏,注意:必须在添加任何其他选项卡之前
调用此函数,否则将是未定义的。
⑨、 QWidget* cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
返回角落 corner 处的小部件或 0。
void setCornerWidget(QWidget* widget, Qt::Corner corner = Qt::TopRightCorner);
把部件 widget 添加到指定的角落 corner 处(效果见下图)。仅选项卡位于上方或下方时
才能使用。

        

⑩、 void setTabEnabled(int index, bool enabled);
bool isTabEnabled(int index) const;
void setTabIcon(int index, const QIcon& icon);
QIcon tabIcon(int index) const;
void setTabText(int index, const QString &text);
QString tabText(int index) const;
//设置选项卡的启用/禁用状态,禁用状态呈现出灰色。
//获取选项卡的启用/禁用状态
//设置选项卡的图标
//获取选项卡的图标。
//设置选项卡的文本
//获取选项卡的文本。
//设置选项卡的提示文本
//获取选项卡的提示文本。
void setTabToolTip(int index, const QString &tip);
QString tabToolTip(int index) const;
void setTabWhatsThis(int index, const QString &text); //设置选项卡的帮助文本
QString tabWhatsThis(int index) const;//获取选项卡的帮助文本。

8、 QTabWidget 类中的信号
①、 void currentChanged(int index); //信号
当选项卡栏上的当前选项卡发生更改时发送此信号, index 为新选项卡的索引,若没
有新的索引,则为-1(比如 QTabBar 中没有选项卡)。该信号比较重要。

②、 void tabBarClicked(int index);    //信号, qt5.2
void tabBarDoubleClicked(int index);    //信号, qt5.2

以上信号表示,单击或双击 index 处的选项卡时发送此信号, index 是单击选项卡的索
引,若光标下没有选项卡,则为-1。
③、 void tabCloseRequested(int index); //信号
当点击选项卡上的关闭按钮时发送此信号, index 为应删除的选项卡的索引。

//m.h 文件的内容
#ifndef M_H
#define M_H
#include<QtWidgets>
#include <iostream>
using namespace std;
class B :public QTabWidget {
	Q_OBJECT
public: B(QWidget* p = 0) :QTabWidget(p) { }
public slots : 
	void f() { removeTab(0); }
}; //移除索引为零的选项卡
#endif // M_H


#include "m.h"
int main(int argc, char *argv[]) {
	QApplication a(argc, argv);
	QWidget w;
	QWidget *pw = new QWidget; QWidget *pw1 = new QWidget; QWidget *pw2 = new QWidget; //容器
	QRadioButton *pr, *pr1, *pr2, *pr3, *pr4, *pr5;
	QPushButton *pb = new QPushButton("remove", &w);
	pr = new QRadioButton("AAA"); pr1 = new QRadioButton("BBB"); pr2 = new QRadioButton("CCC");
	pr3 = new QRadioButton("DDD"); pr4 = new QRadioButton("EEE"); pr5 = new QRadioButton("FFF");
	QVBoxLayout *pv = new QVBoxLayout; //由容器 pw 使用的布局
	QVBoxLayout *pv1 = new QVBoxLayout; 
	QVBoxLayout *pv2 = new QVBoxLayout;
	
	//把子部件添加到容器中
	pv->addWidget(pr); pv->addWidget(pr1); 
	pw->setLayout(pv);	//容器:其中包含有其他部件的部件(为容器设置布局)
	pv1->addWidget(pr2); pv1->addWidget(pr3); 
	pw1->setLayout(pv1);//容器:其中包含有其他部件的部件(为容器设置布局)
	pv2->addWidget(pr4); pv2->addWidget(pr5); 
	pw2->setLayout(pv2);//容器:其中包含有其他部件的部件(为容器设置布局)
	
	B *pt = new B(&w); //创建 QTabWidget 部件,把容器添加到对应的选项卡之下。
	pt->addTab(pw, "AAA"); pt->addTab(pw1, "BBB"); pt->addTab(pw2, "CCC");	
	//以下步骤可使用布局代替,以避免设置部件的位置和大小
	pb->move(22, 22); pt->move(22, 55); pt->resize(222, 111);
	
	cout << pt->indexOf(pw1) << endl; //输出 1。返回 pw1 所在的索引
	cout << pt->indexOf(pr) << endl;  //输出-1,因为 pr 是 pw 的子部件,而不是 pt 的子部件。
	
	QObject::connect(pb, &QPushButton::clicked, pt, &B::f);
	//使用 QTabWidget 可省略类似以下的选项卡与容器的信号和槽的关联步骤。
	//QObject::connect(pt, SIGNAL(currentChanged(int)), ps, SLOT(setCurrentIndex(int)));
	w.resize(300, 200); w.show(); 
	return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字藏品交易系统有哪些特点?

数字藏品交易系统具有以下特点&#xff1a; 去中心化&#xff1a;数字藏品交易系统通常采用去中心化的架构&#xff0c;不依赖于单一的中央机构或权威来管理交易。这意味着交易可以在全球范围内进行&#xff0c;无需中间人。 区块链技术&#xff1a;大多数数字藏品交易系统借助…

小区物业管理缴费报修活动报名商城小程序开源版开发

小区物业管理缴费报修活动报名商城小程序开源版开发 以下是小区物业管理缴费报修活动报名商城小程序开源版的功能列表&#xff1a; 用户注册和登录小区信息展示&#xff08;包括小区简介、周边设施等&#xff09;物业公告显示和发布功能小区物业费用查询和缴费功能基础设施报…

解决安装wsl时候报错的问题: WslRegisterDistribution failed with error: 0x800701bc

在Win10 或者Win 11上安装wsl的时候&#xff0c;可能会遇到如下的错误信息&#xff1a; Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel Press any key to continue... 这个是由于系统内置的WSL内核过低导致的&#xff0c;可以到如…

node的服务端对接科大讯飞-火星ai解决方案

序&#xff1a; 官方给的node对接火星的demo其实只适用于node开发的web应用&#xff0c;但是对于纯node 作为服务端&#xff0c;也就是作为webapi来调用&#xff0c;你会发现&#xff0c;location.host直接是获取不到location的。这个时候&#xff0c;其实要单独起个wss的服务的…

C盘满了,应该清理哪些地方

有时候电脑用着用着C盘就满了&#xff0c;其实大多数原因是因为C:\Users\用户名\AppData下的文件夹下被你的程序软件不断地塞入了各种文件导致的。几乎你在电脑上安装的每个程序都会在AppData 文件夹中创建自己的文件夹&#xff0c;并将该程序的所有相关信息存储在那里。 为了…

类模板深度剖析

类模板可以定义任意多个不同的类型参数 类模板可以被特化 可以指定类模板的特定实现 部分类型参数必须显示指定 根据类型参数分开实现类模板 类模板的特化类型 部分特化 - 用特定规则约束类型参数 完全特化 - 完全显示指定类型参数 类模板特化注意事项 特化只是模板的分开…

官宣 | 2023第四届ISIG中国产业智能大会报名开启

由企智未来科技&#xff08;RPA中国、LowCode低码时代、AIGC开放社区&#xff09;主办的第四届「ISIG中国产业智能大会」将于12月初在上海召开&#xff0c;本届主题为“与科技共赢&#xff0c;与产业共进”。在此次大会中&#xff0c;我们将设立RPA超自动化、低代码/零代码、流…

docker-compose使用

docker-compose docker的项目编排 一、安装docker-compose Rocky Linux Rocky Linux安装Docker Compose的步骤如下&#xff1a; 安装Docker。您可以使用以下命令安装Docker&#xff1a; sudo dnf install docker-ce docker-ce-cli containerd.io安装Docker Compose。您可以…

渗透中 POC、EXP、Payload、Shellcode 的区别

渗透中 PoC、Exp、Payload、Shellcode 的区别 不同含义&#xff1a; POC Proof of Concept中文意思是“观点证明”。这个短语并非仅仅在漏洞报告中使用&#xff0c;甲方在项目招标过程中也常常要求乙方提供POC&#xff0c;即证明你的方案或者产品能达到声称的功能或性能&…

VMware ESXI vCenter 开启 SNMP 方法:

需要监控 ESXI 和 vSphere 系统的状态&#xff0c;开启默认的 SNMP 一、VMware ESXI 开启 SSH 登录到ESXI上执行命令如下&#xff1a; [rootESXI:~] esxcli system snmp set --enable true [rootESXI:~] esxcli system snmp set --communities public [rootESXI:~] esxcli …

IPO解读丨“停车场”以外的故事,智慧互通如何书写?

智能交通赛道或将迎来一家上市公司。 近日&#xff0c;智慧互通科技股份有限公司&#xff08;下称“智慧互通”&#xff09;在河北证监局进行上市辅导备案登记&#xff0c;辅导机构为中信证券。 这家成立于2015年的公司&#xff0c;致力于用AI赋能交通&#xff0c;打造城市级…

中国又一利器”遥遥领先″?纳米RAM市场增长趋势正式超越美国!

纳米RAM是一种前沿的存储技术&#xff0c;利用纳米级工艺技术制造而成&#xff0c;具有极高的存储密度和读写速度。相较于传统的RAM技术&#xff0c;纳米RAM具有更高的可靠性、更低的能耗以及更强的耐久性。这些优势使得纳米RAM成为未来高密度存储和高速计算领域极具潜力的技术…

ros2 安装UR机器人仿真包

1.ros2的版本如下 2.在码云上找到UR驱动包 GitHub很多时候都是无法打开的&#xff0c;但是码云可以复制这个GitHub上的包&#xff0c;别人已经复制好了。可以用连接如下&#xff1a; universal_robots_ros2_driver 3.查看该包的readme文件 这里面有介绍使用二进制安装&#…

RHEL8安装FreeIPA客户端

RHEL8安装FreeIPA客户端 1、在FreeIPA服务器上创建一个用户2、为ipa客户端机器添加DNS记录2.1 在ipa客户机器上配置hosts 3、在客户机上安装FreeIPA客户端4、配置FreeIPA 客户端5、测试FreeIPA客户端5.1 首次登录修改密码 1、在FreeIPA服务器上创建一个用户 参考&#xff1a;h…

可以实时监控电脑的软件有哪些?

在当今的数字化世界中&#xff0c;计算机已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着计算机使用的普及&#xff0c;安全问题也日益突出。为了保护我们的计算机和数据&#xff0c;实时监控电脑的使用情况变得越来越重要。本文将为您介绍一些实时监控电脑的…

1688全店商品采集教程,1688店铺所有商品接口(详解1688店铺所有商品数据采集步骤方法和代码示例)

随着电商行业的快速发展&#xff0c;1688已成为国内的电商平台之一&#xff0c;拥有着海量的商品资源。对于一些需要大量商品数据的商家或者需求方来说&#xff0c;1688全店采集是非常必要的。本文将详细介绍1688全店采集的步骤和技巧&#xff0c;帮助大家更好地完成数据采集任…

如何理解数据要素?如何推进数据要素的价值化和市场化?

近几年大家都在谈我们进入了数字经济时代&#xff0c;数据是重要的生产要素&#xff0c;要努力推进数据要素的价值化和市场化。这里面涉及的相关概念还是挺多的&#xff0c;比如&#xff1a;数据、生产要素、数据资源、数据资产、数据要素等。今天结合对数据要素化的理解来谈谈…

【教程】微信小程序导入外部字体详细流程

前言 在微信小程序中&#xff0c;我们在wxss文件中通过font-family这一CSS属性来设置文本的字体&#xff0c;并且微信小程序有自身支持的内置字体&#xff0c;可以通过代码提示查看微信小程序支持字体&#xff1a; 这些字体具体是什么样式可以参考&#xff1a; 微信小程序--字…

【Spatial-Temporal Action Localization(四)】论文阅读2019年

文章目录 1. You Only Watch Once: A Unified CNN Architecture for Real-Time Spatiotemporal Action Localization摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架实验 2. STEP: Spatio-Temporal Progressive Learning for Video Action Detection摘要和结论引言&…

云原生之深入解析Jenkins多分支管道

一、 前言 多分支管道是一种基于 Git 分支自动创建 Jenkins Pipeline 的概念&#xff0c;这意味着&#xff0c;它可以在 SCM&#xff08;Github&#xff09;中创建时自动发现新的 Git 分支&#xff0c;并自动为该分支创建管道&#xff0c;当管道构建开始时&#xff0c;Jenkins…