【Qt控件之QTabWidget】介绍及使用

news2024/12/23 20:54:31

描述

QTabWidget类提供了一个带有选项卡的小部件堆栈。
在这里插入图片描述

选项卡小部件提供了一个选项卡栏(参见QTabBar)和一个“页面区域”,用于显示与每个选项卡相关联的页面。默认情况下,选项卡栏显示在页面区域的上方,但可以使用不同的配置(参见TabPosition)进行更改。每个选项卡与不同的小部件(称为页面)相关联。只有当前页面在页面区域中显示,其他所有页面都被隐藏。用户可以通过单击选项卡或按下其Alt+字母快捷键(如果有的话)来显示不同的页面。

使用方式

使用QTabWidget的常规方式如下:

  1. 创建一个QTabWidget对象。
  2. 为选项卡对话框中的每个页面创建一个QWidget,但不为它们指定父窗口小部件。
  3. 使用布局将子窗口小部件插入页面小部件,以正常的方式定位它们。
  4. 使用addTab()insertTab()将页面小部件放入选项卡窗口小部件中,并为每个选项卡提供适当的标签,可以选择性地添加键盘快捷键。

选项卡的位置由tabPosition定义,其形状由tabShape定义。

当用户选择一个页面时,将触发currentChanged()信号。

当前页面索引可通过currentIndex()获得,当前页面小部件可通过currentWidget()获得。您可以使用widget()检索具有给定索引的页面小部件,并可以使用indexOf()找到小部件的索引位置。使用setCurrentWidget()setCurrentIndex()来显示特定页面。

您可以使用setTabText()setTabIcon()更改选项卡的文本和图标。可以使用removeTab()删除选项卡及其相关页面。

每个选项卡在任何给定时间都可以启用或禁用(参见setTabEnabled())。如果选项卡启用,选项卡文本将以正常方式绘制,用户可以选择该选项卡。如果选项卡禁用,选项卡将以不同的方式绘制,用户无法选择该选项卡。
请注意,即使选项卡被禁用,页面仍然可以可见,例如,如果所有选项卡都恰好被禁用。

选项卡小部件可以很好地将复杂的对话框分割成多个部分。另一种选择是使用QStackedWidget,您可以为其提供一些导航方式,例如QToolBarQListWidget

QTabWidget中的大部分功能由QTabBar(位于顶部,提供选项卡)和QStackedWidget(大部分区域,组织个别页面)提供。

常用函数

枚举类型 QTabWidget::TabPosition

此枚举类型定义了 QTabWidget 绘制选项卡行的位置:

常量描述
QTabWidget::North0选项卡绘制在页面上方。
QTabWidget::South1选项卡绘制在页面下方。
QTabWidget::West2选项卡绘制在页面左侧。
QTabWidget::East3选项卡绘制在页面右侧。
枚举类型 QTabWidget::TabShape

此枚举类型定义了选项卡的形状:

常量描述
QTabWidget::Rounded0选项卡以圆角形状绘制。这是默认形状。
QTabWidget::Triangular1选项卡以三角形形状绘制。
成员函数介绍(部分):
  • 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;

    // 添加按钮用于动态添加tab
    QPushButton 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); // 添加新的tab
        index++;
    });

    // 插入按钮用于在当前tab之后插入新的tab
    QPushButton 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); // 插入新的tab
        index++;
    });

    // 关闭按钮用于关闭当前选中的tab
    QPushButton 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图标和文本的功能。可以根据实际需求更改按钮的样式和功能实现。

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

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

相关文章

2023年拼多多双11百亿补贴新增单件立减玩法介绍

2023年拼多多双11百亿补贴新增单件立减玩法介绍 拼多多启动了11.11大促活动&#xff0c;主题为“天天11.11&#xff0c;天天真低价”。消费者享受多重优惠&#xff0c;包括满减、百亿补贴和单件立减等。百亿补贴新增玩法&#xff0c;有超过20000款品牌商品参与单件立减活动。 …

【内网穿透】五分钟搭建全球领先开源ERP:Odoo,并实现公网访问

目录 前言 1. 下载安装Odoo&#xff1a; 2. 实现公网访问Odoo本地系统&#xff1a; 3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着…

Vue3踩坑指南

vue.config.ts不起作用 关于项目 项目使用的还是vue-cli搭建的&#xff0c;底层还是webpack&#xff0c;没有使用新的vite搭建。 踩坑1&#xff1a;vue.config.ts不起作用 我本着既然是vue3 ts的项目&#xff0c;那么为了规范&#xff0c;项目中所有的js文件都得替换成ts文…

HanLP集成到Springboot及使用自定义词典

前言 HanLP集成到Springboot及使用自定义词典 文章目录 前言简介集成Springboot扩展使用自定义词典路径易错问题 简介 开源工具包&#xff0c;提供词法分析、句法分析、文本分析和情感分析等功能&#xff0c;具有功能完善、性能高效、架构清晰、语料时新、可自定义等特点。 官…

【小白专用 已验证】PHP连接SQLServer数据库

PHP是一门强大的服务器端脚本语言&#xff0c;而SQL Server是Microsoft开发的一款关系型数据库管理系统。为了在PHP中直接操纵SQL Server数据库&#xff0c;需要通过安装SQL Server扩展来实现。这篇文章将详细介绍如何在PHP中使用SQL Server扩展来操作数据库。 首先&#xff0…

那些你面试必须知道的webpack知识点

目录 1、webpack介绍和简单使用1.1 什么是webpack&#xff1f;1.2 安装webpack1.3 简单使用一下webpack 2、webpack的入口与输出2.1 入口(entry)2.2 输出(output) 3、入口多种配置方法3.1 多文件打包成一个文件3.2 多文件打包成多文件 4、loader的概念5、压缩打包HTML5.1 使用步…

DP基础相关笔记

基础 DP LIS LIS&#xff08;Longest Increasing Subsequence&#xff09;&#xff0c;顾名思义&#xff0c;就是最长上升子序列问题。 在这里我们要区分一下子串和子序列的区别&#xff0c;很简单&#xff0c;子串连续&#xff0c;子序列可以不连续。然而就在几小时之前本蒟…

分布式应用开发的核心技术系列之——基于TCP/IP的原始消息设计

本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文的内容主要围绕以下几个部分&#xff1a; TCP/IP的简单介绍。消息的介绍。基于消息分类的传输格式&…

嵌入式养成计划-46----QT--简易版网络聊天室实现

一百一十九、简易版网络聊天室实现 119.1 QT实现连接TCP协议 119.1.1 基于TCP的通信流程 119.1.2 QT中实现服务器过程 使用QTcpServer实例化一个服务器对象设置监听状态&#xff0c;通过listen()函数&#xff0c;可以监听特定的主机&#xff0c;也可以监听所有客户端&#x…

二维码智慧门牌管理系统升级解决方案:高效、便捷、安全的外业数据管理方法

文章目录 前言一、背景与需求二、升级解决方案三、方案优势 前言 在当今的信息化社会&#xff0c;数据管理的重要性日益凸显。尤其对于像二维码智慧门牌管理系统这样的复杂系统&#xff0c;如何实现高效、便捷、安全的数据管理&#xff0c;成为了系统升级的重要议题。本文将详…

计算机数据库中了malloxx勒索病毒怎么解决,勒索病毒解密,数据恢复

随着网络技术的不断发展&#xff0c;越来越多的网络安全威胁也不断增加&#xff0c;最近&#xff0c;云天数据恢复中心接到一些企业的求助&#xff0c;企业的计算机数据库遭到了malloxx勒索病毒攻击&#xff0c;导致企业所有计算机服务器无法正常使用&#xff0c;针对此次勒索病…

51单片机定时器和中断(03)

eg1&#xff1a;数码管如何显示出字符 51单片机40个引脚的功能需要记住** RXD&#xff1a;表示的是串行输入口INT0&#xff1a;外部中断0INT1&#xff1a;外部中断1TO : 外部中断0T1 &#xff1a;外部中断1WR: 外部输入存储器写RD: 外部输出存储器读XTK2/XTL1 单片机晶振的输…

微信公众号迁移详细步骤

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;很多小伙伴想做公众号迁移&#xff0c;但是不知道公众号迁移有什么作用&#xff0c;今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了&#xff0c;比如我们公众号原来是A公司的&#xff0c;现…

Ubuntu 22.04 中安装 fcitx5

Ubuntu 22.04 中安装 fcitx5 可以按照以下步骤进行&#xff1a; 添加 fcitx5 的 PPA 首先&#xff0c;添加 fcitx5 的官方 PPA&#xff1a; sudo add-apt-repository ppa:fcitx-team/fcitx5更新软件包列表 sudo apt update安装 fcitx5 sudo apt install fcitx5 fcitx5-conf…

基于SSM的文化培训学校网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

030-第三代软件开发-密码输入框

第三代软件开发-密码输入框 文章目录 第三代软件开发-密码输入框项目介绍密码输入框总结一下 关键字&#xff1a; Qt、 Qml、 echoMode、 TextInput、 Image 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language…

【Qt控件之QMdiArea】介绍及使用

描述 QMdiArea小部件提供了一个区域&#xff0c;用于显示MDI窗口。QMdiArea的功能类似于MDI窗口的窗口管理器。例如&#xff0c;它在自身上绘制和排列管理的窗口&#xff0c;可以按级联或平铺模式排列它们。通常&#xff0c;QMdiArea被用作QMainWindow的中心小部件&#xff0c…

YOLOv5算法改进(17)— 手把手教你去更换损失函数(IoU/GIoU/DIoU/CIoU/EIoU/AlphaIoU/SIoU)

前言:Hello大家好,我是小哥谈。损失函数(loss function)是机器学习中用来衡量模型预测值与真实值之间差异的函数。它用于度量模型在训练过程中的性能,以便优化模型参数。在训练过程中,损失函数会根据模型的预测结果和真实标签计算出一个标量值,代表了模型预测的错误程度…

离散低通滤波方法

低通滤波器允许低频信号通过&#xff0c;并抑制高频信号。其核心思想是在频率域上通过移除高频成分来平滑信号。这在去噪、平滑和提取基本频率成分时非常有用。 离散低通滤波方法通常采用一阶低通滤波器进行处理。一阶低通滤波器是一种常见的数字滤波器&#xff0c;能够将信号…

分享 | 对 电商API 平台的再思考

API 是推动现代企业数字化转型的基础。它不但连接了内部应用程序、合作伙伴和客户&#xff0c;同时也快速持续地向市场提供了各种新产品、版本和功能。 但当下还是以集中式的 API 交付为主。一个企业的对外 API 交付过程通常都是冗余而繁琐的&#xff0c;对企业内部的敏捷性、速…