当前位置: 首页 > 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…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...