qt tabwidget切换_qtabwidget tab样式

qt tabwidget切换_qtabwidget tab样式感谢https://blog.csdn.net/skyztttt/article/details/52448992QTabWidget默认的Tab方向是水平的,从属性设置更改tabPosition=west后的效果如下图最终效果图#ifndefMH1_H#defineMH1_H#include<QMainWindow>#include<QPainter&gt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

感谢 https://blog.csdn.net/skyztttt/article/details/52448992

QTabWidget默认的 Tab方向是水平的,从属性设置更改 tabPosition=west后的效果如下图

qt tabwidget切换_qtabwidget tab样式

最终效果图

qt tabwidget切换_qtabwidget tab样式

#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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • b站的java教程怎么样(b站学java哪个好)

    Heyguys,这里是cxuan,欢迎你收看我最新一期的文章。这是一篇鸽了很久的文章。。。。。。事情还要从上回说起。。。。。。我爱B站!这篇文章我汇总了B站上计算机基础(操作系统、计算机网络、数据结构和算法、汇编等)学习视频,受到了很多小伙伴的认可和追更。甚至CSDN还有在催我更新的读者朋友所以这篇文章,不能再拖了,更新起来!!!Java基础Java基础:尚硅谷宋红康https://www.bilibili.com/video/BV1Qb411g7cz?from

    2022年4月15日
    159
  • sudo :apt-get:command not found

    sudo :apt-get:command not found

    2021年10月8日
    43
  • CSS3 Transition[通俗易懂]

    CSS3 Transition[通俗易懂]Transition简介Transition可以设置CSS属性的过渡效果,它有以下几个属性。transition-property用于指定应用过渡属性的名称transition-duration用于指定这个过渡的持续时间transition-delay用于指定延迟过渡的时间transition-timing-function用于指定过渡的类型transition-p…

    2022年7月13日
    21
  • office每次打开都提示重新配置的三种解决方法

    office每次打开都提示重新配置的三种解决方法相信总有人遇到过每次打开Office2013都会遇到坑爹的“安装程序正在准备必要的文件”然后再显示“正在配置MicrosoftOfficeProfessionalPlus2013"的情况(如下图所示)。之所以出现这个问题,有三个情况:1、你的office安装的不完整,或者是用ghost安装系统的时候,自带的。特别是ghost自带的,他们都没有与系统握手。所以,每次都需要配置。…

    2022年7月19日
    31
  • Java-重载与重写的区别[通俗易懂]

    Java-重载与重写的区别[通俗易懂]重写(Override)规则:当子继承父类的方法时,此方法不适用于子的程序执行,需要进行重写。参数列表必须完全与被重写方法相同返回类型必须与被重写方法的返回类型相同子类重写的方法访问权限不能小于被重写的方法。父类的成员方法只能被它的子类重写声明为static和private的方法不能被重写,但是能够被再次声明重写(Override)和重载(Overload)的区别参数列表重写:参数列表必须与被重写的方法相同。重载:参数列表必须不同发生的位置重写:发生在子类中重载:发生在一个类

    2022年7月7日
    24
  • vue格式化时间戳_日期格式转换

    vue格式化时间戳_日期格式转换第一步:下载安装第三方组件:npminstallmoment–save第二步:在你需要格式化时间的页面引入moment组件importmomentfrom’moment’第三步:然后配合我们element-ui,在元素中加入:formatter<el-table-columnprop=”add_time”label=”创建时间”:formatter=”dateFormat”width=”200px”></el-table-column&gt

    2022年9月25日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号