QTanimationbutton

#ifndef ANIMATIONBUTTON_H

#define ANIMATIONBUTTON_H

#include <QWidget>

#include <QVariant>

class QPropertyAnimation;

class AnimationButton : public QWidget

{

Q_OBJECT

public:

explicit AnimationButton(QWidget *parent = nullptr);

~AnimationButton();

protected:

void enterEvent(QEvent *event);

void leaveEvent(QEvent *event);

void paintEvent(QPaintEvent *event);

private:

bool enter;

bool leave;

int pixwidth;

int pixheight;

int oldwidth;

int oldheight;

int targetwidth;

int targetheight;

QString text;

QString image;

QPropertyAnimation *enteranimation;

QPropertyAnimation *leaveanimation;

private slots:

void enterimagechanged(QVariant index);

void leaveimagechanged(QVariant index);

public slots:

void settext(QString text);

void setimage(QString image);

signals:

};

#endif // ANIMATIONBUTTON_H


#include "animationbutton.h"

#include "qpainter.h"

#include "qdebug.h"

#include "qpropertyanimation.h"

AnimationButton::AnimationButton(QWidget *parent) : QWidget(parent)

{

enter=true;

leave=false;

pixwidth=0;

pixheight=0;

oldwidth=0;

oldheight=0;

enteranimation = new QPropertyAnimation(this,"");

enteranimation->setStartValue(0);

enteranimation->setEndValue(5);

enteranimation->setDuration(200);

connect(enteranimation,&QPropertyAnimation::valueChanged,this,&AnimationButton::enterimagechanged);

leaveanimation = new QPropertyAnimation(this,"");

leaveanimation->setStartValue(0);

leaveanimation->setEndValue(5);

leaveanimation->setDuration(200);

connect(leaveanimation,&QPropertyAnimation::valueChanged,this,&AnimationButton::leaveimagechanged);

}

AnimationButton::~AnimationButton()

{

delete enteranimation;

delete leaveanimation;

}

void AnimationButton::enterEvent(QEvent *event)

{

enter=true;

leave=false;

pixwidth=pixwidth-25;

pixheight=pixheight-25;

enteranimation->start();

}

void AnimationButton::leaveEvent(QEvent *event)

{

enter=false;

leave=true;

pixwidth=oldwidth;

pixheight=oldheight;

leaveanimation->start();

}

void AnimationButton::paintEvent(QPaintEvent *event)

{

if (image.isEmpty())

{

return;

}

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing);

QPixmap pix(image);

pix=pix.scaled(targetwidth,targetheight,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);

if(enter || leave)

{

int pixX=rect().center().x()-targetwidth/2;

int pixY=rect().center().y()-targetheight/2;

QPoint point(pixX,pixY);

painter.drawPixmap(point,pix);

painter.drawText(QRectF(0,height()-20,width(),20),Qt::AlignCenter,text);

}

}

void AnimationButton::enterimagechanged(QVariant index)

{

int i=index.toInt();

targetwidth=pixwidth+i*5;

targetheight=pixheight+i*5;

update();

}

void AnimationButton::leaveimagechanged(QVariant index)

{

int i=index.toInt();

targetwidth=pixwidth-i*5;

targetheight=pixheight-i*5;

update();

}

void AnimationButton::settext(QString text)

{

this->text=text;

update();

}

void AnimationButton::setimage(QString image)

{

this->image=image;

QPixmap pix(image);

pixwidth=pix.width();

pixheight=pix.height();

oldwidth=pixwidth;

oldheight=pixheight;

targetwidth=pixwidth-25;

targetheight=pixheight-25;

update();

}


#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

private:

Ui::Widget *ui;

};

#endif // WIDGET_H


#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

// QString qss="color:#BECEC6;background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #FFFFFF,stop:1 #EAF2FF)";

// QString qss="color:#BECEC6;background:qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 #030303,stop:1 #2E8B57)";

// QString qss="color:black;background:qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 green,stop:1 blue)";

QString qss="color:rgba(0,0,0,1);background:qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 rgba(0, 255, 0, 255),stop:1 rgba(255, 255, 0, 255))";

this->setStyleSheet(qss);

ui->widget1->settext("inter");

ui->widget1->setimage(":/new/prefix1/image/inter.png");

ui->widget2->settext("other");

ui->widget2->setimage(":/new/prefix1/image/other.png");

ui->widget3->settext("user");

ui->widget3->setimage(":/new/prefix1/image/user.png");

ui->widget4->settext("set");

ui->widget4->setimage(":/new/prefix1/image/set.png");

ui->widget4->update();

}

Widget::~Widget()

{

delete ui;

}

相关推荐
bikong73 小时前
一种高效绘制余晖波形的方法Qt/C++
数据库·c++·qt
追烽少年x5 小时前
QProxyStyle类中drawControl和drawComplexControl函数的区别是什么
qt
长沙红胖子Qt5 小时前
VTK开发笔记(五):示例Cone2,熟悉观察者模式,在Qt窗口中详解复现对应的Demo
qt·观察者模式·vtk·回调
郝学胜-神的一滴6 小时前
基于OpenGL封装摄像机类:视图矩阵与透视矩阵的实现
c++·qt·线性代数·矩阵·游戏引擎·图形渲染
华溢澄11 小时前
macOS下基于Qt/C++的OpenGL开发环境的搭建
c++·qt·macos·opengl
刃神太酷啦11 小时前
C++ 异常处理机制:从基础到实践的全面解析----《Hello C++ Wrold!》(20)--(C/C++)
java·c语言·开发语言·c++·qt·算法·leetcode
枫叶丹411 小时前
【Qt开发】显示类控件(一)-> QLabel
开发语言·qt
yBmZlQzJ12 小时前
PyQt5 修改标签字体和颜色的程序
开发语言·python·qt
滴滴滴嘟嘟嘟.12 小时前
Qt UDP通信学习
qt·学习·udp
橘颂TA14 小时前
【Qt】项目的创建 and 各个控件的使用
开发语言·qt