Qt | 自定义SwitchButton

发布时间:2024年01月04日

一、效果图

请添加图片描述

二、主要功能

  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()
文章来源:https://blog.csdn.net/m0_72760466/article/details/135331216
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。