Qt 自定义动画按钮(超酷炫)
整体的界面是 一个主 widget 套着3个 widget(微信,支付宝,银行卡)
点击widget时 出现一个dialog 的二维码
下面上代码
二维码窗口
// 二维码窗口
qrcodedialog.h #ifndef QRCODEDIALOG_H
#define QRCODEDIALOG_H#include <QDialog>namespace Ui {class QRcodeDialog;
}class QRcodeDialog : public QDialog
{Q_OBJECTpublic:explicit QRcodeDialog(QWidget *parent = 0);~QRcodeDialog();
protected:void mouseDoubleClickEvent(QMouseEvent *event);void paintEvent(QPaintEvent *event);
private:Ui::QRcodeDialog *ui;
};#endif // QRCODEDIALOG_H
#include "qrcodedialog.h"
#include "ui_qrcodedialog.h"
#include <QMouseEvent>
#include <QPainter>
QRcodeDialog::QRcodeDialog(QWidget *parent) :QDialog(parent),ui(new Ui::QRcodeDialog)
{ui->setupUi(this);this->setWindowTitle("手机扫码");}QRcodeDialog::~QRcodeDialog()
{delete ui;
}void QRcodeDialog::mouseDoubleClickEvent(QMouseEvent *event)
{this->hide();
}void QRcodeDialog::paintEvent(QPaintEvent *event)
{QPainter paint(this);paint.setRenderHint(QPainter::Antialiasing);QPixmap img(":/QRcode.png");paint.drawPixmap(0,0,img.width(),img.height(),img);
}
动画按钮代码
#ifndef MYANIMATIONBUTTON_H
#define MYANIMATIONBUTTON_H#include <QWidget>
#include "qrcodedialog.h"class QPropertyAnimation;class myAnimationButton : public QWidget
{Q_OBJECTpublic:explicit myAnimationButton(QWidget *parent = 0);~myAnimationButton();void enterImageChanged(QVariant value);void leaveImageChanged(QVariant value);void setImagePath(QString path);void setText(QString text){this->text = text;}
protected:void enterEvent(QEvent *event);void leaveEvent(QEvent *event);void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);private:int imageWidth;int imageHeight;int originalWidth;int originalHeight;int newWidth;int newHeight;QString imagePath;QString text;QPropertyAnimation* enterAnimation;QPropertyAnimation* leaveAnimation;QRcodeDialog* dialog;};#endif // MYANIMATIONBUTTON_H
#include "myanimationbutton.h"
#include <QPropertyAnimation>
#include <QPainter>
#include <QDebug>
#include <QMouseEvent>
myAnimationButton::myAnimationButton(QWidget *parent) :QWidget(parent){imageWidth = 0;imageHeight = 0;originalWidth = 0;originalHeight = 0;newWidth = 0;newHeight = 0;imagePath = "";enterAnimation = new QPropertyAnimation(this,"");enterAnimation->setStartValue(0);enterAnimation->setEndValue(25);enterAnimation->setDuration(200);connect(enterAnimation,&QPropertyAnimation::valueChanged,this,&myAnimationButton::enterImageChanged);leaveAnimation = new QPropertyAnimation(this,"");leaveAnimation->setStartValue(0);leaveAnimation->setEndValue(25);leaveAnimation->setDuration(200);connect(leaveAnimation,&QPropertyAnimation::valueChanged,this,&myAnimationButton::leaveImageChanged);dialog = new QRcodeDialog(this);
}myAnimationButton::~myAnimationButton()
{delete enterAnimation;delete leaveAnimation;
}void myAnimationButton::enterImageChanged(QVariant value)
{newWidth = imageWidth + value.toInt();newHeight = imageHeight + value.toInt();update();
}void myAnimationButton::leaveImageChanged(QVariant value)
{newWidth = imageWidth - value.toInt();newHeight = imageHeight - value.toInt();update();
}void myAnimationButton::setImagePath(QString path)
{imagePath = path;QPixmap img(path);imageWidth = img.width();imageHeight = img.height();originalWidth = imageWidth;originalHeight = imageHeight;newWidth = imageWidth - 25;newHeight = imageHeight - 25;update();
}void myAnimationButton::enterEvent(QEvent *event)
{imageWidth = imageWidth - 25;imageHeight = imageHeight - 25;enterAnimation->start();
}void myAnimationButton::leaveEvent(QEvent *event)
{imageWidth = originalWidth;imageHeight = originalHeight;leaveAnimation->start();
}void myAnimationButton::paintEvent(QPaintEvent *event)
{if(imagePath.isEmpty())return;QPainter paint(this);paint.setRenderHint(QPainter::Antialiasing);QPixmap img(imagePath);img = img.scaled(newWidth,newHeight,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);int pixX = rect().center().x() - newWidth / 2;int pixY = rect().center().y() - newHeight / 2 - 10;QPoint point(pixX, pixY);paint.drawPixmap(point, img);paint.drawText(QRectF(0, height() - 20, width(), 20), Qt::AlignCenter, text);
}void myAnimationButton::mousePressEvent(QMouseEvent *event)
{if(imagePath.isEmpty())return;QPixmap image(imagePath);if(image.rect().contains(event->pos())){qDebug()<<"press";dialog->show();}}
主窗体
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowTitle("动画按钮");ui->widget->setImagePath(":/weChart.png");ui->widget->setText("微信支付");ui->widget_2->setImagePath(":/pay.png");ui->widget_2->setText("支付宝支付");ui->widget_3->setImagePath(":/bank.png");ui->widget_3->setText("银行卡支付");
}MainWindow::~MainWindow()
{delete ui;
}
图片资源是在 阿里巴巴矢量图标网 下载的
Qt 自定义动画按钮(超酷炫)相关推荐
- HTML5七夕情人节表白网页制作【飘落蒲公英动画超酷炫的HTML5页面】HTML+CSS+JavaScript
这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...
- HTML5七夕情人节表白网页_飘落蒲公英动画超酷炫的HTML5页面_ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册
HTML5七夕情人节表白网页❤飘落蒲公英动画超酷炫的HTML5页面❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 ...
- pr cpu100%_6款超酷炫又小众的PR插件 据说都用过就是大神!
PR作为目前最主流的视频编辑软件 拥有大量的配套插件模板等等 我们也推送过PR大量常用的插件 如转场.调色.特效等等 但PR还许多超酷炫又小众的插件 本期菌菌就为大家精选了6款插件 帮助小伙伴更好的进 ...
- 有什么做GIF的软件?这3款APP超酷炫
有什么做GIF的软件?喜欢聊微信的你们都有这种感觉吧:聊天的时候,大部分情况下都是动态图片比静态图片更能表达情绪.经常会看到一张有意思的动态图片后,像中了魔一样反复观看,说不定还会嘻嘻嘻地笑出声来吓到 ...
- Lively Wallpaper ---- 超酷炫的桌面壁纸
最近在github 上找到一个超酷炫的桌面壁纸程序,支持各种格式的素材作为壁纸 下载链接: https://github.com/rocksdanister/lively/releases/tag/v ...
- 8个超酷炫仿苹果应用的HTML5动画
苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...
- 8个超酷炫的仿苹果应用的HTML5动画
苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...
- PS教程!教你打造超酷炫的德罗斯特效应
编者按:从前有座山,山上有座庙,庙里有个-这类可以无限循环的东西在视觉里叫德罗斯特效应,非常有意思的效果,而且简单易学,今天折葵同学这篇教程不仅有给新手的超简单3步搞定法,而且有效果更酷炫的代码进阶版 ...
- Qt 自定义动画属性 QPropertyAnimation
简述 QPropertyAnimation类定义了Qt的属性动画. QPropertyAnimation以Qt属性做差值,作为属性值存储在QVariants中,该类继承自QVariantAnimati ...
最新文章
- 关于面向对象的的设计原则的使用
- uboot启动过程中关闭Caches
- 无责任畅想:云原生中间件的下一站
- 软件版本具体代表什么意思
- Spring Boot(六)集成 MyBatis 操作 MySQL 8
- 类GeometricShapeFactory-JTS几何图形绘制API
- mybatis(数据库增删改查)
- 第二阶段--个人冲刺--第七天
- 微信多开txt_1分钟教你如何实现微信多开!建议收藏!
- matlab如何运行程序
- java栈和队列的区别是什么意思_java中的栈和队列有什么区别
- html设置请求头host,Http请求头Host字段作用
- [侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼(数据结构)
- win7计算机组策略打不开,三个步骤解决win7系统本地组策略打不开的问题
- Python之文件操作(常用操作)
- 标准光照模型-半兰伯特模型
- 我花了十八年时间才能和你坐在一起喝咖啡
- maven deploy上传文件到私服 神坑解决
- 华南X99主板-报AE(RE)错误排查
- 斑马快传,高效安全的内外网文件传输软件,可穿透网闸服务器杀毒。