Qt | QSlider美化-零样式表-自定义样式

本文介绍了如何从GitHub获取Qt-RoastedDuck-Widgets库中的Silder类源码,展示了滑块组件的画线和绘制处理函数,以及使用GPLv3许可证的开源情况。
摘要由CSDN通过智能技术生成

一、效果图

请添加图片描述

二、获取方式

源码可以在Github上下载,后续会不断更新,并且提供C++版本组件,欢迎各位关注。

  1. Github :https://github.com/Rev-RoastedDuck/Qt-RoastedDuck-Widgets.git
  2. 视频主页:https://space.bilibili.com/439475163/video
  3. CSDN主页:https://blog.csdn.net/m0_72760466

三、声明

本文使用了遵循GPLv3许可证的开源代码-Qt-RoastedDuck-Widgets,以下代码遵循GPLv3许可证。

四、核心代码

class Silder(SilderBase):
    def __init__(self, orientation: Qt.Orientation, parent=None, ):
        super().__init__(orientation, parent=parent)
        self.__paramsConfig()

    def __paramsConfig(self):
        # 颜色
        self.__color_groove_add = QColor(231, 227, 228)
        self.__color_groove_sub = QColor(148, 59, 142)
        self.__color_handle_outside = QColor(QColor(255, 255, 255))
        self.__color_handle_inside = QColor(QColor(148, 59, 142))

        # 线宽
        self.__width_line = 6

        # padding
        self.__padding = 15

        # handle 半径
        self.radius_handle = 10

    def __paintGroove(self, painter: QPainter):
        painter.save()

        pen = QPen()
        pen.setCapStyle(Qt.RoundCap)
        pen.setWidth(self.__width_line)
        pen.setColor(self.__color_groove_add)

        painter.setPen(pen)

        if self.orientation() == Qt.Orientation.Horizontal:
            painter.drawLine(QPoint(self.__padding, self.__padding),
                             QPoint(self.width() - self.__padding * 2, self.__padding))
        else:
            painter.drawLine(QPoint(self.__padding, self.height() - self.__padding * 2),
                             QPoint(self.__padding, self.__padding))

        if self.value():
            args = self.width() if self.orientation() == Qt.Orientation.Horizontal else self.height()
            xy = int(((args - self.__padding * 2) / (self.maximum() - self.minimum())) * (self.value() - self.minimum()) + self.__padding)
            xy = xy if xy <= args - self.__padding else args - self.__padding

            pen.setColor(self.__color_groove_sub)
            painter.setPen(pen)

            if self.orientation() == Qt.Orientation.Horizontal:
                painter.drawLine(QPoint(self.__padding, self.__padding), QPoint(xy, self.__padding))
            else:
                painter.drawLine(QPoint(self.__padding, self.__padding),QPoint(self.__padding, xy))

        painter.restore()

    def __paintHandle(self, painter: QPainter):
        painter.save()

        point = self.__getHandlePos()

        if self.__is_hovering_handle:
            radius_big = self.radius_handle + 3
            radius_little = int(self.radius_handle * 0.6)
        else:
            radius_big = self.radius_handle
            radius_little = int(self.radius_handle * 0.6)
        # 外圆部分
        painter.setBrush(self.__color_handle_outside)
        painter.drawEllipse(point, radius_big, radius_big)

        # 内圆部分
        painter.setBrush(self.__color_handle_inside)
        painter.drawEllipse(point, radius_little, radius_little)

        painter.restore()
  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值