Qt工作笔记-自定义开关控件
发布日期:2021-06-30 10:56:49
浏览次数:2
分类:技术文章
本文共 3390 字,大约阅读时间需要 11 分钟。
1.自定义开关控件;
2.点击有动画效果;
3.在动画效果中,不再响应信号;
运行截图如下:
输出响应信号:
源码如下:
myonoff.h
#ifndef MYONOFF_H#define MYONOFF_H#includeQT_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#includenamespace 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"#includeint 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月16日 06时11分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何输入多组数据并输出每组数据的和?
2019-04-30
基于CentOS 7的Linux常用命令行命令
2019-04-30
行阶梯型矩阵
2019-04-30
信号量机制
2019-04-30
临界资源与临界区
2019-04-30
灰度直方图均衡化(附源码)
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30
图像去噪(包含修正的阿尔法均值滤波及通用滤波方法代码)
2019-04-30
SVM进行人脸检测
2019-04-30
C++学习笔记
2019-04-30
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Machine Learning with MATLAB 1.1 to 2.2
2019-04-30
Learning DSP with MATLAB
2019-04-30
用MATLAB实现m序列的生成(MATLAB 2021a适用)
2019-04-30
MATLAB函数备忘(定期更新)
2019-04-30
13行MATLAB代码实现网络爬虫 爬取NASA画廊星图
2019-04-30
MATLAB指定路径保存图片方法
2019-04-30
Python一键获取微信推送封面图
2019-04-30