当前位置: 首页 > news >正文

QTabWidget的每个tab居中显示图标和文本

使用QTabWidget,给每个tab添加了图标之后,文字和图标之间有间距,没有完美居中显示。

遇到此问题,尝试了多种办法,均不理想,最终自定义QTabBar,重绘tab,完美解决。

#include <QTabBar>
#include <QStylePainter>class MyTabBar : public QTabBar {
public:MyTabBar(QWidget *parent = nullptr) : QTabBar(parent){}protected:void paintEvent(QPaintEvent *) override{QStylePainter painter(this);for (int index = 0; index < this->count(); ++index) {QStyleOptionTab opt;initStyleOption(&opt, index);// 计算图标和文字的长度(含间距)int iconTextWidth = opt.iconSize.width()+ opt.fontMetrics.horizontalAdvance(opt.text)+ 4; // 4 是图标和文字的间距int x = (opt.rect.width() - iconTextWidth) / 2 + opt.rect.width() * index;painter.save();// 指定各状态下的按钮状态if (opt.state & QStyle::State_Selected) { // 按下状态painter.setPen(QColor(255, 255, 255));painter.fillRect(rect, QColor(31, 68, 133));} else if (opt.state & QStyle::State_MouseOver) { // 鼠标停留状态painter.setPen(QColor(255, 255, 255));painter.fillRect(rect, QColor(33, 72, 141));} else if (!(opt.state & QStyle::State_Enabled)) { // 禁止状态painter.setPen(QColor(255, 255, 255, 153));painter.fillRect(rect, QColor(84, 123, 192));} else { // 正常状态(默认)painter.setPen(QColor(255, 255, 255));painter.fillRect(rect, QColor(41, 90, 176));}QRect iconRect(x, (opt.rect.height() - opt.iconSize.height()) / 2,opt.iconSize.width(), opt.iconSize.height());painter.drawPixmap(iconRect, opt.icon.pixmap(opt.iconSize));QRect textRect(iconRect.right() + 4, 0,opt.rect.width() * (index + 1) - iconRect.right() - 4,opt.rect.height());painter.drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, opt.text);painter.restore();}}
};

调用:

ui->tabWidget->setTabBar(new MyTabBar(this));

相关文章:

QTabWidget的每个tab居中显示图标和文本

使用QTabWidget&#xff0c;给每个tab添加了图标之后&#xff0c;文字和图标之间有间距&#xff0c;没有完美居中显示。 遇到此问题&#xff0c;尝试了多种办法&#xff0c;均不理想&#xff0c;最终自定义QTabBar&#xff0c;重绘tab&#xff0c;完美解决。 #include <QT…...

Ubuntu20.04如何安装Microsoft Edge浏览器?

Microsoft Edge是由微软开发的一款网页浏览器,首次发布于2015年,作为Windows 10操作系统的默认浏览器,取代了之前的Internet Explorer。 基于Chromium内核:自2019年起,Microsoft Edge转向了使用开源的Chromium内核,这使得它与Google Chrome在性能和兼容性方面有很多相似之…...

美团Java一面

美团Java一面 9.24一面&#xff0c;已经寄了 收到的第一个面试&#xff0c;表现很不好 spring bean生命周期 作用域&#xff08;忘完了&#xff09; 为什么用redis缓存 redis和数据库的缓存一致性问题 redis集群下缓存更新不一致问题 aop说一下 arraylist和linkedlist 数据库的…...

C#中ref关键字和out关键字

值传递和引用传递 值传递和引用传递是编程中涉及数据传递的两种方式。它们的主要区别在于数据是如何在函数或方法之间传递的。 值传递 值传递意味着当你把一个变量传递给一个函数时&#xff0c;实际上传递的是这个变量的值的一个拷贝。也就是说&#xff0c;函数内部对这个参数…...

贴吧软件怎么切换ip

在网络使用中&#xff0c;有时我们需要切换IP地址来满足特定的需求&#xff0c;比如需要切换贴吧软件IP以进行不同的操作。本文将介绍几种贴吧切换IP地址的方法&#xff0c;帮助用户更好地管理自己的网络身份和访问权限。 1、更换网络环境‌ 通过连接到不同的Wi-Fi网络或使用移…...

图像分割恢复方法

传统的图像分割方法主要依赖于图像的灰度值、纹理、颜色等特征&#xff0c;通过不同的算法将图像分割成多个区域。这些方法通常可以分为以下几类&#xff1a; 1.基于阈值的方法 2.基于边缘的方法 3.基于区域的方法 4.基于聚类的方法 下面详细介绍这些方法及其示例代码。 1. 基…...

Ultralytics:YOLO11使用教程

Ultralytics&#xff1a;YOLO11使用教程 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows YOLO11使用教程进行目标检测进行实例分割进行姿势估计进行旋转框检测进行图像分类 参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多…...

前缀和算法——优选算法

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 一、什么是前缀和&#xff1f; 前缀和是指从数组的起始位置到某一位置&#xff08;或矩阵的某个区域&#xff09;的所有元素的和。这种算法通过预处理数组或矩阵&#xff0c;…...

YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块

目录 一、HAttention注意力机制1.1HAttention注意力介绍1.2HAT核心代码 二、添加HAT注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、HAttention注意力机制 1.1HAttention注意力介绍 HAT模型 通过结合卷积特征提取与多尺度注意…...

老牛也想吃嫩草,思科为何巨资投入云初创CoreWeave?

【科技明说 &#xff5c; 科技热点关注】 当我看到前些天思科(Cisco)的新闻时笑了。业内朋友对我说&#xff0c;老牛也想吃嫩草&#xff0c;人之常情尔&#xff0c;都是为了好好活着。 作为全球著名的网络产品巨头&#xff0c;思科Cisco论是遭遇到何种市场与行业巨变&#xff…...

Spring Boot 事务管理入门

在 Spring Boot 应用中&#xff0c;事务管理是一个至关重要的方面&#xff0c;它确保了数据的一致性和完整性。本文将深入探讨 Spring Boot 中事务管理的机制、使用方法以及注意事项&#xff0c;并提供丰富的示例代码。 其它教程&#xff1a; mysql事务详解 一、事务基础概念…...

20年408数据结构

第一题&#xff1a; 解析&#xff1a;这种题可以先画个草图分析一下&#xff0c;一下就看出来了。 这里的m(7,2)对应的是这图里的m(2,7),第一列存1个元素&#xff0c;第二列存2个元素&#xff0c;第三列存3个元素&#xff0c;第四列存4个元素&#xff0c;第五列存5个元素&#…...

4反馈、LC、石英、RC振荡器

1什么是振荡器&#xff1f; 我们看看振荡器在无线通信中扮演什么角色&#xff1f; 1&#xff09;无线通信的波是指电磁波‌。 2‌&#xff09;电磁波的频率高于100KHz才能在空气中传播。‌ 3&#xff09;空气中的高频电磁波的相位和振幅可以排列组合包含信息。 4&#xff09;无…...

go 的 timer reset

在 Go 语言 1.23 版本之前&#xff0c;与Timer&#xff08;定时器&#xff09;关联的通道是异步的&#xff08;有缓冲&#xff0c;容量为 1&#xff09;。这意味着即使在调用Timer.Stop&#xff08;停止定时器&#xff09;或Timer.Reset&#xff08;重置定时器&#xff09;并返…...

每日一面 day03

Q&#xff1a;介绍一下MySQL的三种日志&#xff08;redo&#xff0c;undo&#xff0c;bin&#xff09; Redo Log 和 Undo Log 是存储引擎 InnoDB 层面实现的&#xff0c;Bin Log 是 MySQL 层面实现的。 下面是三种日志的简要介绍&#xff1a; Redo Log&#xff1a;保证事务的…...

ssm基于SSM框架的餐馆点餐系统的设计+VUE

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…...

多人播报配音怎么弄?简单4招分享

想象一下&#xff0c;你手中的小说突然间活了起来&#xff0c;每个角色都有了自己的声音和情感。 这就是多人配音的魅力所在。它让文字跃然纸上&#xff0c;赋予了故事新的生命。 那么&#xff0c;如何制作一部引人入胜的小说呢&#xff1f;多人配音怎么制作的呢&#xff1f;…...

《Windows PE》4.1导入表

导入表顾名思义&#xff0c;就是记录外部导入函数信息的表。这些信息包括外部导入函数的序号、名称、地址和所属的DLL动态链接库的名称。Windows程序中使用的所有API接口函数都是从系统DLL中调用的。当然也可能是自定义的DLL动态链接库。对于调用方&#xff0c;我们称之为导入函…...

计算机专业大学生应该如何规划大学四年?

计算机专业的大学生在学习过程中应该注重以下几个方面&#xff0c;以确保他们在快速变化的技术领域中保持竞争力&#xff1a; 基础知识&#xff1a; 数学基础&#xff1a;离散数学、线性代数、概率论等数学课程对于理解算法和数据结构至关重要。编程基础&#xff1a;学习至少一…...

R知识图谱1—tidyverse玩转数据处理120题

以下是本人依据张老师提供的tidyverse题库自行刷题后的tidyverse Rmd文件&#xff0c;部分解法参考张老师提示&#xff0c;部分解法我本人灵感提供 数据下载来源https://github.com/zhjx19/tidyverse120/tree/main/data 参考https://github.com/MaybeBio/R_cheatsheet/tree/mai…...

别再死记命令了!用ENSP模拟企业网,手把手教你配置VRRP+MSTP实现网关和链路双备份

企业网络高可用实战&#xff1a;用ENSP构建VRRPMSTP双冗余架构 刚接触企业网络设计的工程师常陷入一个误区&#xff1a;把网络设备配置等同于命令记忆。我曾见过一位学员能完整背诵VRRP的配置指令&#xff0c;却在真实网络故障时手足无措——因为他从未理解这些命令背后的网络逻…...

Taotoken API Key管理功能实现团队权限与访问控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API Key管理功能实现团队权限与访问控制 在团队协作开发或项目管理中&#xff0c;如何安全、可控地分发大模型调用资源是…...

AWorks硬件抽象层:嵌入式开发中UART、I2C、SPI、ADC接口的统一编程实践

1. 项目概述&#xff1a;当嵌入式开发遇上“万能插座”在嵌入式系统开发中&#xff0c;我们常常面临一个经典难题&#xff1a;硬件平台的碎片化。今天&#xff0c;你可能在为一块基于ARM Cortex-M4的MCU编写SPI驱动&#xff0c;用来连接一块TFT屏幕&#xff1b;明天&#xff0c…...

如何免费使用R3nzSkin游戏皮肤修改器:完整技术指南与内存钩子实战

如何免费使用R3nzSkin游戏皮肤修改器&#xff1a;完整技术指南与内存钩子实战 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为《英雄联盟》设计的开源游戏皮肤修改器&a…...

别再死磕开发了!网络安全职业前景全面解析:薪资水平、就业方向与学习路线图

别&#xff0c;你可千万别后悔&#xff01;&#xff01;&#xff01; 首先&#xff0c;你学网安这个选择没有一点毛病&#xff0c;作为一个前辈&#xff0c;我可以明明白白的告诉你&#xff0c;近年程序员就业情况当中&#xff0c;网安是最舒服的一批&#xff0c;所以我看到你说…...

Onyx Core API完全手册:RESTful接口详解与实战案例

Onyx Core API完全手册&#xff1a;RESTful接口详解与实战案例 【免费下载链接】Onyx Onyx 项目地址: https://gitcode.com/gh_mirrors/ony/Onyx Onyx Core是一个强大的企业级区块链平台&#xff0c;提供完整的RESTful API接口&#xff0c;让开发者能够轻松构建和管理区…...

麒麟系统上跑32位老程序,别再折腾了!用这个离线打包法,5分钟搞定依赖

麒麟系统32位程序兼容方案&#xff1a;离线依赖打包全流程指南 在国产化操作系统迁移浪潮中&#xff0c;许多企业面临一个共同难题——那些关键业务依赖的32位遗留程序如何在仅支持64位的新系统上运行&#xff1f;本文将以麒麟系统为例&#xff0c;详解一套经过实战检验的离线依…...

Karpathy 加入 Anthropic 真相:不是人才争夺,是「用 AI 训练 AI」的自我加速时代

先想象一个场景 2026 年初&#xff0c;你是一家 AI 实验室的 CTO。预算有限&#xff0c;买不起 OpenAI 那量级的 GPU。你有三个选择&#xff1a; A. 追着头部跑&#xff0c;花 80% 的钱买算力&#xff0c;剩下 20% 养团队——永远比别人慢半步 B. 放弃预训练&#xff0c;专注…...

手把手教你用Wireshark和VirtualBox日志诊断eNSP错误代码40(保姆级排错流程)

从日志分析到网络诊断&#xff1a;eNSP错误代码40的深度排错指南 当eNSP模拟器弹出"错误代码40"的红色警告时&#xff0c;大多数用户的第一反应是寻找快速解决方案。但真正的网络工程师会告诉你&#xff0c;这个数字背后隐藏着虚拟网络世界的完整故事。本文将带您穿…...

书籍分享:《VirtualLab Fusion物理光学实验教程》

第一章 物理光学概念介绍 1.1 几何光学和光线追迹 1.2 物理光学和光场追迹 1.3 电场、磁场以及坡印廷矢量 1.4 振幅、相位及实部和虚部 1.5 振幅、相位与偏振 1.6菲涅尔公式 1.7 全反射 1.8倏逝波 第二章 光的干涉及干涉系统建模仿真 2.1 牛顿环模拟仿真 2.1.1 牛顿…...