基于QWidget实现一个简单的开关控件,左右动画效果切换,效果如下

样式在paintEvent中绘制

void RdSwitchButton::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setPen(Qt::gray);painter.setBrush(m_normalColor);painter.drawRect(this->rect());painter.setPen(Qt::NoPen);painter.setBrush(m_selectColor);QRect selectRect;selectRect = QRect(m_xVal, 0, this->width()/2, this->height());painter.drawRect(selectRect);painter.setPen(m_leftPenColor);painter.drawText(QRect(0, 0, this->width()/2, this->height()), Qt::AlignCenter, m_leftText);painter.setPen(m_rightPenColor);painter.drawText(QRect(this->width()/2, 0, this->width()/2, this->height()), Qt::AlignCenter, m_rightText);QWidget::paintEvent(event);
}

mouseReleaseEvent触发开关切换

void RdSwitchButton::mouseReleaseEvent(QMouseEvent *event)
{QPoint curPos = event->pos();bool bChecked = curPos.x() <= this->width()/2 ? false : true;if(bChecked == m_bChecked)return;m_bChecked = bChecked;m_xVal = bChecked == false ? this->width()/2 : 0;m_pTimer->start();QWidget::mouseReleaseEvent(event);
}

定时器实现动画效果

    m_pTimer = new QTimer(this);m_pTimer->setInterval(20);connect(m_pTimer, &QTimer::timeout, this, &RdSwitchButton::onTimeout);
void RdSwitchButton::onTimeout()
{if(!m_bChecked) {m_xVal -= 6;if(m_xVal <= 0) {m_xVal = 0;m_leftPenColor = Qt::white;m_rightPenColor = Qt::black;m_pTimer->stop();QTimer::singleShot(10, this, [=]{emit sigClick(m_bChecked);});}}else {m_xVal += 6;if(m_xVal >= this->width()/2) {m_xVal = this->width()/2;m_leftPenColor = Qt::black;m_rightPenColor = Qt::white;m_pTimer->stop();QTimer::singleShot(10, this, [=]{emit sigClick(m_bChecked);});}}update();
}

实现比较简单,简单记录一下

完整的代码下载

csdn下载

【Qt】qt自定义开关控件相关推荐

  1. Qt工作笔记-自定义开关控件

    1.自定义开关控件: 2.点击有动画效果: 3.在动画效果中,不再响应信号: 运行截图如下: 输出响应信号: 源码如下: myonoff.h #ifndef MYONOFF_H #define MYO ...

  2. Qt QWidget实现开关控件SwithButton(SlipButton)

    前言 Qt做界面的时候常常会用到开关控件,类似于CheckButton有两种状态,只是界面表现形式不一样而已.本文通过QWidget类来实现一个开关控件SwitchBtn(有些平台上又称为SlipBu ...

  3. Qt C++ 自定义仪表盘控件02

    简介 仪表盘是工控领域不可缺少的一类软件UI元素,通常出现在各类电子看板软件上,以及一些高级的上位机软件界面上,目的是将繁杂的数据转化为可视化的图表能大幅提高后台管理效率. 本文分享了几个经典常用的仪 ...

  4. Qt C++ 自定义仪表盘控件03

    简介 仪表盘是工控领域不可缺少的一类软件UI元素,通常出现在各类电子看板软件上,以及一些高级的上位机软件界面上,目的是将繁杂的数据转化为可视化的图表能大幅提高后台管理效率. 本文分享了几个经典常用的仪 ...

  5. Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

    说明 Qt可以比较方便地实现自定义控件在Qt Creator中使用.网上也有很多大神的控件可以使用,但是如果想要自己简单定制也可以按照这个流程. 本文的要点: [1]如何实现一个自定义控件? 本文使用 ...

  6. Qt汽车自定义仪表盘控件

    先看效果,后上源码: 下面是自定义的一个控件类: #ifndef DIALWIDGET_H #define DIALWIDGET_H#include <QWidget>class Dial ...

  7. Android自己写的三款实用开关控件

    2019独角兽企业重金招聘Python工程师标准>>> 自定义开关控件,代码简单,比较实用. http://www.see-source.com/androidwidget/list ...

  8. QT自定义Widget控件及其使用

    今天来给大家分享一下QT自定义widget控件及其使用,当ui设计器提供的界面不满足实际需求时,可以从QWidget继承自定义的界面组件.有两种方法一种是提升法,另一种是ui设计器自定义界面组件wid ...

  9. Qt使用C++封装qml自定义图形控件(QQuickPaintedItem)

    C++封装qml自定义图形控件 QtWidget.qml简介 通过继承QQuickPaintedItem封装控件 描述 公用接口定义 代码示例 效果图 QtWidget.qml简介 Qt提供了2套UI ...

最新文章

  1. Java Date 日期 时间 相关方法
  2. zend studio
  3. Linux学习笔记033_8文本处理
  4. java 三大框架面试题
  5. k-means 聚类算法
  6. mie散射理论方程_A. Mie米散射理论基础
  7. tab切换webuploader失效的解决方法
  8. Firefox关闭最后一个标签页时不关闭Firefox的设置
  9. 超详细!一文详解 SparkStreaming 如何整合 Kafka !附代码可实践
  10. npm依赖管理:冗余,依赖树
  11. 2021-09-08 全排列
  12. win10系统matlab不能卸载不了,win10系统matlab打不开无法运行的方案
  13. 修改只读文件权限并修改文件
  14. 计算机视觉论文-2021-07-15
  15. iPhone 6年代iWatch热销缘由:可穿戴更有招引力
  16. Docker——docker-volume原理
  17. 4.8 51单片机-PCF8591(ADC/DAC)转换芯片
  18. conda与Anaconda
  19. 文章8:多功能智能跟随行李箱控制系统设计 | 本科毕业设计 - 【毕设答辩问答记录】
  20. CdTe量子点及与牛血清蛋白的偶联/CdTe量子点与CLV3信号多肽片段偶联/GSH-CdTe量子点与溶菌酶的偶联

热门文章

  1. 安装IIS时,出现‘请将windows XP Professional Service Pack 3 CD 光盘插入’及类似问题解决方法
  2. iOS:苹果企业证书通过网页分发安装app
  3. Python 同时继承多个类
  4. 链叨叨直播间丨Happy Panda火热来袭,深度解析国宝养成链游
  5. 杂谈随感-6:敢问路在何方?
  6. SQLite4Unity3d使用
  7. 阿里的面试流程及面试及面试技巧
  8. 《NFL橄榄球》:费城老鹰·橄榄1号位
  9. VUE 页面传参、页面跳转
  10. java swing 打开网页_Swing 实现超链接 打开网页 | 学步园