Qt | 自定义SwitchButton

一、效果图

请添加图片描述

二、主要功能

  1. 通过继承QToolButton,实现了SwitchButton
  2. 对SwitchButton做了一定的美化

三、获取方式

源码可以在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 SwitchButtonBase(QToolButton):
    def __init__(self, parent: QWidget = None):
        super().__init__(parent)
        self.setCheckable(True)
        self._indicatorX = 0

        self.animaInit()

    def animaInit(self):
        self.slideAni = QPropertyAnimation(self, b'indicatorX')
        self.slideAni.setDuration(200)

    def animaParamsInit(self):
        self.start = self.height() // 2
        self.end = self.width() - 2 - self.start
        self._indicatorX = self.start

    def setParams(self):
        pass

    def toggle(self):
        self.setChecked(not self.isChecked())

    def mouseReleaseEvent(self, event) -> None:
        super().mouseReleaseEvent(event)
        if self.isChecked():
            self.slideAni.setEndValue(self.end)
        else:
            self.slideAni.setEndValue(self.start)
        self.slideAni.start()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHints(QPainter.Antialiasing)
        self.paintBackground(painter)
        self.paintIndicator(painter)

    def paintBackground(self, painter: QPainter):
        pass

    def paintIndicator(self, painter: QPainter):
        pass

    @Property(float)
    def indicatorX(self):
        return self._indicatorX

    @indicatorX.setter
    def indicatorX(self, x):
        self._indicatorX = x
        self.update()

    def showEvent(self, event):
        super().showEvent(event)
        self.animaParamsInit()
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值