QTabWidget的QTabBar位于左侧且横向

2023-10-28 15:40

本文主要是介绍QTabWidget的QTabBar位于左侧且横向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考这篇文章:

(1条消息) QTabWidget 竖向 QTabBar横向_qtabwidget竖向表头_Harbin Kakashi的博客-CSDN博客

(这里纯纯记录学习一下,建议大家跳转到链接处学习) 

(ps:后来发现可以使用QListWidget和QStackedWidget组合使用来达到类似的效果。)

 先使用 tab->setTabPosition(QTabWidget::West);

调整QTabBar位置到左边

目标效果:                                                                       原始效果:

主要就是使用自定义样式重置QTabBar的样式

tab->tabBar()->setStyle(new CustomTabStyle);

类的继承关系:QStyle--->QCommonStyle--->QProxyStyle--->CustomTabStyle

里面有两个函数:

(1)函数决定控件大小。

QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget = Q_NULLPTR) const

1.1:翻转控件的宽和高

    QSize sizeFromContents(ContentsType type, const QStyleOption *option,const QSize &size, const QWidget *widget) const{QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);if (type == QStyle::CT_TabBarTab) {s.transpose();//transpose:互换位置}return s;}

 1.2自定义控件大小

    QSize sizeFromContents(ContentsType type, const QStyleOption *option,const QSize &size, const QWidget *widget) const{QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);if (type == QStyle::CT_TabBarTab) {
//            s.transpose();//transpose:互换位置s.rwidth() = 150; // 设置每个tabBar中item的大小s.rheight() = 50;}return s;}

 

 (2)自绘控件

void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const

你可以自己使用QPainter绘制出自己的风格。

他依此画出被选中时,悬浮时,平时三种状态下的方框。

    void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const{if (element == CE_TabBarTabLabel) {if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option)) {QRect allRect = tab->rect;allRect.setWidth(allRect.width() - 5);allRect.setHeight(allRect.height() - 2);//选中状态if (tab->state & QStyle::State_Selected) {//save用以保存坐标,restore用来退出状态painter->save();painter->setBrush(QBrush(0x004ea1));//带有弧线矩形painter->drawRoundedRect(tab->rect, 8, 8);painter->restore();}//hover状态else if(tab->state & QStyle::State_MouseOver){painter->save();painter->setBrush(QBrush(0x004ea1));painter->drawRoundedRect(allRect, 8, 8);painter->restore();}else{painter->save();painter->setBrush(QBrush(0x78aadc));painter->drawRoundedRect(allRect, 8, 8);painter->restore();}painter->save();QTextOption option;//option:选择option.setAlignment(Qt::AlignCenter);painter->setFont(QFont("楷体", 18, QFont::Bold));painter->setPen(0xffffff);painter->drawText(allRect, tab->text, option);painter->restore();return;}}if (element == CE_TabBarTab) {QProxyStyle::drawControl(element, option, painter, widget);}}

感想:

1.感觉到Qt框架的厉害之处,有很多需要学习的地方。

2.感谢博主的分享。

这篇关于QTabWidget的QTabBar位于左侧且横向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294226

相关文章

【自动驾驶】控制算法(八)横向控制Ⅱ | Carsim 与 Matlab 联合仿真基本操作

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将

内网渗透—横向移动非约束委派约束委派

前言 今天依旧是横向移动的内容,委派主要分为三类非约束委派、约束委派、资源委派。今天主要讲前面两个内容,资源委派留到最后再讲。 实验环境 Web:192.168.145.137,192.168.22.28DC:192.168.22.30 非约束委派 原理 原理很简单,当DC访问具有非约束委派权限的主机A时,会把当前域管理员账户的TGT放在ST票据中,然后一起发给主机A。主机A会把TG

内网安全-横向移动【3】

1.域横向移动-内网服务-Exchange探针 Exchange是一个电子右键服务组件,由微软公司开发。它不仅是一个邮件系统,还是一个消息与协作系统。Exchange可以用来构建企业、学校的邮件系统,同时也是一个协作平台,可以基于此开发工作流、知识管理系统、Web系统或其他消息系统。 1.1 端口扫描 Exchange探针会对外暴露接口如OWA,ECP等,会暴露在80端口,而且北25/5

Android 横向列表GridView 实现横向滚动

Android 横向列表实现,可左右滑动,如下图   1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.GirdView外包裹LinearLayout是java代码中参数设置的必要条件 <?xml version="1.0" encoding="utf-8"?><Line

【最新华为OD机试E卷】最左侧冗余覆盖子串(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

觉飞内衣洗衣机值得买的?小吉、希亦、觉飞三大爆款单品横向测评

近两年内衣洗衣机逐渐走进了大众的视线,不少人说可以洗清洗干净内衣裤、减少细菌,避免细菌的交叉感染;但有人又说内衣洗衣机是智商税?根本没什么作用?都是心理因素在作怪,在面对这样对立的说法,不少小白陷入迷茫。 作为一个专业的测评博主,我可以负责任的告诉大家,出现这些负面问题完全是因为大家选用了劣质产品所导致的。为了有效的避免,在本篇文章中我也将为大家深度测评当前市面上的三大网红品牌,将通过真实的数据

最全 | Redis可视化工具横向评测

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 来源:suo.im/66KSqr 1 命令行 不知道大家在日常操作redis时用什么可视化工具呢? 以前总觉得没有什么太好的可视化工具,于是问了一个业内朋友。对方回:你还用可视化工具?直接命令行呀,redis提供了这么多命令,操作起来行云流水。用可视化工具觉得很low。 命令行的鄙视用工具的,用高端工具的鄙视低端工具的,鄙视链一

[Meachines] [Medium] Bitlab 标签自动填充登录+GitLab+Docker横向+Postgresql+逆向工程

信息收集 IP AddressOpening Ports10.10.10.114TCP:22,80 $ nmap -p- 10.10.10.114 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; pr

在二叉树中求位于先序序列中第k个位置的结点的值

编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值。 二叉链表类型定义: typedef struct BiTNode {TElemType data;BiTNode *lchild, *rchild;} BiTNode, *BiTree;实现函数如下: TElemType GetElemType(BiTree bt,int &num,TElemType &e){

Unity实战案例全解析 之 背包/贩卖/锻造系统(左侧类图实现)

物品类 using System.Collections;using System.Collections.Generic;using UnityEngine;public class Item {#region 物品类的基础属性public int ID { get; set; }public string Name { get; set; }public Typeitem typ