大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
感谢 https://blog.csdn.net/skyztttt/article/details/52448992
QTabWidget默认的 Tab方向是水平的,从属性设置更改 tabPosition=west后的效果如下图
最终效果图
#ifndef MH1_H
#define MH1_H
#include <QMainWindow>
#include <QPainter>
#include <QProxyStyle>
#include <QStyleOptionTab>
class CustomTabStyle : public QProxyStyle
{
public:
/* sizeFromContents
* 用于设置Tab标签大小
* 1.获取原标签大小
* 2.宽高切换
* 3.强制宽高
* 4.return
* */
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();
s.rwidth() = 120; // 设置每个tabBar中item的大小
s.rheight() = 44;
}
return s;
}
/* drawControl
* 画控件
* 1.过滤CE_TabBarTabLabel
* 2.选择状态下的背景绘制
* a.获取Rect
* b.保存旧的画笔
* c.设置新画笔
* d.画 Rect
* e.恢复旧的画笔
* 3.设定Text对齐及选中/非选中状态下的Text颜色
* 4.过滤CE_TabBarTab,对其进行绘制
* */
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;
if (tab->state & QStyle::State_Selected) {
painter->save();
painter->setPen(0x89cfff);
painter->setBrush(QBrush(0x89cfff));
QRect nrct = allRect.adjusted(6, 6, -6, -6);
painter->drawRect(allRect.adjusted(6, 6, -6, -6));
painter->restore();
}
QTextOption option;
option.setAlignment(Qt::AlignCenter);
if (tab->state & QStyle::State_Selected) {
painter->setPen(0xf8fcff);
}
else {
painter->setPen(0x5d5d5d);
}
painter->drawText(allRect, tab->text, option);
return;
}
}
if (element == CE_TabBarTab) {
QProxyStyle::drawControl(element, option, painter, widget);
}
}
};
#endif // MH1_H
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192986.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...