Qt工作笔记-自定义开关控件
发布日期:2021-06-30 10:56:49 浏览次数:2 分类:技术文章

本文共 3390 字,大约阅读时间需要 11 分钟。

1.自定义开关控件;

2.点击有动画效果;

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

运行截图如下:

输出响应信号:

源码如下:

myonoff.h

#ifndef MYONOFF_H#define MYONOFF_H#include 
QT_BEGIN_NAMESPACEclass QPropertyAnimation;QT_END_NAMESPACEclass MyOnOff : public QLabel{ Q_OBJECT Q_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 
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 
int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}

myonoff.cpp

#include "myonoff.h"#include 
#include
#include
#include
#include
#include
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 change controlWidgetChanged(); 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 
#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
(&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"; }}

 

转载地址:https://it1995.blog.csdn.net/article/details/82876809 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt工作笔记-图像模糊处理,以及动画旋转
下一篇:软件设计师学习笔记-面向对象设计

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月16日 06时11分42秒