1.自定义开关控件;

2.点击有动画效果;

3.在动画效果中,不再响应信号;

运行截图如下:

输出响应信号:

源码如下:

myonoff.h

#ifndef MYONOFF_H
#define MYONOFF_H#include <QLabel>QT_BEGIN_NAMESPACE
class QPropertyAnimation;
QT_END_NAMESPACEclass MyOnOff : public QLabel
{Q_OBJECTQ_PROPERTY(int onoffStatus READ onoffStatus WRITE setOnoffStatus NOTIFY onoffStatusChanged)public:enum status{ON,OFF};MyOnOff(QWidget *parent = 0);int onoffStatus()const;void setOnoffStatus(const int status);signals:void onoffStatusChanged(int status);protected:void paintEvent(QPaintEvent *event)Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *event)Q_DECL_OVERRIDE;void controlWidgetChanged();private:int m_onoffStatus;bool m_animationIsRun;QPropertyAnimation *m_propertyAnimation;
};#endif // MYONOFF_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void onOffStatus(int status);private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

myonoff.cpp

#include "myonoff.h"
#include <QPropertyAnimation>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>
#include <QTimer>
#include <QEventLoop>MyOnOff::MyOnOff(QWidget *parent): QLabel(parent), m_onoffStatus(ON), m_animationIsRun(false)
{m_propertyAnimation=new QPropertyAnimation(this,"minimumSize");
}int MyOnOff::onoffStatus() const
{return m_onoffStatus;
}void MyOnOff::setOnoffStatus(const int status)
{m_onoffStatus=status;emit onoffStatusChanged(m_onoffStatus);
}void MyOnOff::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)QPainter painter(this);painter.save();if(m_onoffStatus){painter.drawPixmap(0,0,QPixmap(":/img/off.png").scaled(minimumSize()));}else{painter.drawPixmap(0,0,QPixmap(":/img/on.png").scaled(minimumSize()));}painter.restore();
}void MyOnOff::mouseReleaseEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton&&!m_animationIsRun){m_animationIsRun=true;bool onoffStatus=m_onoffStatus;setOnoffStatus(!onoffStatus);update();//Began to changecontrolWidgetChanged();m_animationIsRun=false;}event->accept();
}void MyOnOff::controlWidgetChanged()
{m_propertyAnimation->setDuration(500);m_propertyAnimation->setStartValue(QSize(64,64));m_propertyAnimation->setEndValue(QSize(74,74));m_propertyAnimation->start();QEventLoop loop;QTimer::singleShot(1*600,&loop,&QEventLoop::quit);loop.exec();m_propertyAnimation->setDuration(500);m_propertyAnimation->setStartValue(QSize(74,74));m_propertyAnimation->setEndValue(QSize(64,64));m_propertyAnimation->start();QTimer::singleShot(1*500,&loop,&QEventLoop::quit);loop.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "myonoff.h"#include <QDebug>#ifndef OFF
#define OFF 1
#define ON 0
#endifWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->label,static_cast<void(MyOnOff::*)(int)>(&MyOnOff::onoffStatusChanged),this,&Widget::onOffStatus);setWindowTitle("CSDN IT1995");
}Widget::~Widget()
{delete ui;
}void Widget::onOffStatus(int status)
{if(status==OFF){qDebug()<<"The switch is off";}else{qDebug()<<"The switch is on";}
}

Qt工作笔记-自定义开关控件相关推荐

  1. qt designer使用自定义ui控件

    文章目录 qt designer使用自定义ui控件 使用须知 插件应该存放的位置 Qt creator内置的designer 独立的designer 构建一个可使用的插件 Qt creator内置的d ...

  2. 【Qt】qt自定义开关控件

    基于QWidget实现一个简单的开关控件,左右动画效果切换,效果如下 样式在paintEvent中绘制 void RdSwitchButton::paintEvent(QPaintEvent *eve ...

  3. Qt学习笔记之常用控件QlistWidget

    一.QListWidget Class The QListWidget class provides an item-based list widget. More... Header: #inclu ...

  4. Android开发学习笔记-自定义组合控件

    为了能让代码能够更多的复用,故使用组合控件.下面是我正在写的项目中用到的方法. 1.先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中. <?xml version="1. ...

  5. Qt那些年自定义的控件--弹簧开关按钮

    可水平可垂直. 项目中尤其平板中,有时候需要类似控件的拖拽或者增值控制.直接上代码: paintEvent Q_UNUSED(event);QPainter p(this);p.setPen(Qt:: ...

  6. Qt学习笔记之常用控件QTreeWidget

    一.QTreeWidget Class The QTreeWidget class provides a tree view that uses a predefined tree model. Mo ...

  7. Qt工作笔记-自定义QSortFilterProxyModel实现多列分别过滤

    程序运行截图如下: 原理,重写QSortFilterProxyModel类中的filterAcceptsRow即可: 源码如下: mysortfilterproxymodel.h #ifndef MY ...

  8. Qt工作笔记-自定义菜单(右键菜单)

    所以,只要重写createWIdget()这个函数就阔以了! 把写好的界面放到这个parent里面不就阔以了! 写好的界面如下: 运行截图如下: 源码如下: mypopwidget.h #ifndef ...

  9. Qt工作笔记-自定义模型【继承QAbstractTableModel】

    程序运行截图如下: 代码如下: mymodel.h #ifndef MYMODEL_H #define MYMODEL_H#include <QAbstractTableModel> #i ...

最新文章

  1. MSP430F149的ADC12应用
  2. MYSQ 查看 2 进制日志
  3. C#获取文件夹下的所有文件名
  4. 《中国人工智能学会通讯》——7.10 总结和展望
  5. webserver技术总结之一:webserver概念
  6. python绘制三角函数图像_用python画三角函数
  7. 利用可道云kodexplorer一键部署私有云!路由器免费变NAS!
  8. 微信服务号、订阅号和企业号的区别
  9. 宠物狗行走手机应用市场现状研究分析-
  10. 开关电源个人总结(电感部分与滤波电容)
  11. 老年手机英文改中文_老年人使用智能手机(九)不会英语不用怕,装一款软件就能出国啦...
  12. 如何激活预装的office
  13. python-探索性数据分析-足球赛事数据集
  14. 摩尔斯电码_摩尔斯电码二叉树和baader meinhof现象
  15. Spring系列之强大的Spel表达式
  16. 生命游戏(Java)
  17. 转载:自动化测试金字塔与反模式
  18. 2016年五·一劳动节广州国际生物岛10公里环岛跑策划方案
  19. 自建exchange邮箱怎么发送超大附件?
  20. 安卓开发中如何将apk放在服务器上供用户下载

热门文章

  1. 对ExtendedWebBrowser的再扩展
  2. 2007-11-7学习EXT第一天:EXT简介
  3. 程序员如何通过书籍学习编程?小心用错方法,不然可能事倍功半!
  4. 基于hadoop架构的企业数字化转型,阿里数据中台实战案例
  5. Frontpage网页制作软件,你们还记得吗?
  6. 【转载】此时此刻的飞秋爱好者
  7. 用于二次开发企业即时通讯源码(C++/MFC)
  8. 在VC中使用ADO开发数据库应用程序
  9. 这可能是最适合C++学习者的书单
  10. 《微信小程序开发》学习情况大调查!