整体的界面是 一个主 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 自定义动画按钮(超酷炫)相关推荐

  1. HTML5七夕情人节表白网页制作【飘落蒲公英动画超酷炫的HTML5页面】HTML+CSS+JavaScript

    这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...

  2. HTML5七夕情人节表白网页_飘落蒲公英动画超酷炫的HTML5页面_ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册

    HTML5七夕情人节表白网页❤飘落蒲公英动画超酷炫的HTML5页面❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 ...

  3. pr cpu100%_6款超酷炫又小众的PR插件 据说都用过就是大神!

    PR作为目前最主流的视频编辑软件 拥有大量的配套插件模板等等 我们也推送过PR大量常用的插件 如转场.调色.特效等等 但PR还许多超酷炫又小众的插件 本期菌菌就为大家精选了6款插件 帮助小伙伴更好的进 ...

  4. 有什么做GIF的软件?这3款APP超酷炫

    有什么做GIF的软件?喜欢聊微信的你们都有这种感觉吧:聊天的时候,大部分情况下都是动态图片比静态图片更能表达情绪.经常会看到一张有意思的动态图片后,像中了魔一样反复观看,说不定还会嘻嘻嘻地笑出声来吓到 ...

  5. Lively Wallpaper ---- 超酷炫的桌面壁纸

    最近在github 上找到一个超酷炫的桌面壁纸程序,支持各种格式的素材作为壁纸 下载链接: https://github.com/rocksdanister/lively/releases/tag/v ...

  6. 8个超酷炫仿苹果应用的HTML5动画

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

  7. 8个超酷炫的仿苹果应用的HTML5动画

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

  8. PS教程!教你打造超酷炫的德罗斯特效应

    编者按:从前有座山,山上有座庙,庙里有个-这类可以无限循环的东西在视觉里叫德罗斯特效应,非常有意思的效果,而且简单易学,今天折葵同学这篇教程不仅有给新手的超简单3步搞定法,而且有效果更酷炫的代码进阶版 ...

  9. Qt 自定义动画属性 QPropertyAnimation

    简述 QPropertyAnimation类定义了Qt的属性动画. QPropertyAnimation以Qt属性做差值,作为属性值存储在QVariants中,该类继承自QVariantAnimati ...

最新文章

  1. 关于面向对象的的设计原则的使用
  2. uboot启动过程中关闭Caches
  3. 无责任畅想:云原生中间件的下一站
  4. 软件版本具体代表什么意思
  5. Spring Boot(六)集成 MyBatis 操作 MySQL 8
  6. 类GeometricShapeFactory-JTS几何图形绘制API
  7. mybatis(数据库增删改查)
  8. 第二阶段--个人冲刺--第七天
  9. 微信多开txt_1分钟教你如何实现微信多开!建议收藏!
  10. matlab如何运行程序
  11. java栈和队列的区别是什么意思_java中的栈和队列有什么区别
  12. html设置请求头host,Http请求头Host字段作用
  13. [侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼(数据结构)
  14. win7计算机组策略打不开,三个步骤解决win7系统本地组策略打不开的问题
  15. Python之文件操作(常用操作)
  16. 标准光照模型-半兰伯特模型
  17. 我花了十八年时间才能和你坐在一起喝咖啡
  18. maven deploy上传文件到私服 神坑解决
  19. 华南X99主板-报AE(RE)错误排查
  20. 斑马快传,高效安全的内外网文件传输软件,可穿透网闸服务器杀毒。

热门文章

  1. 一步一步介绍如何配置性能优秀的系统(一)
  2. 时隔六年,苹果超越vivo,再次成为中国市场最大智能手机厂商
  3. PrintWriter实现追加文本底层探究
  4. GIS与BIM,倾斜摄影助力可视化设计更加真实
  5. 南京农业大学计算机二级,南京农业大学2017年3月计算机等级考试报名时间
  6. 新供应商和团购平台合作指南,该如何操作?
  7. jquery插件 (jquery之家)的使用案列,(瀑布流的使用)非常简单
  8. wordpress和帝国cms怎么选择
  9. 简单NLP分析套路(3)---- 可视化展现初步
  10. 百度云的「极速秒传」