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;

}

相关推荐
眠りたいです38 分钟前
Qt音频播放器项目实践:文件过滤、元数据提取与动态歌词显示实现
c++·qt·ui·音视频·媒体·qt5·mime
奇树谦13 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt
Franklin16 小时前
Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
开发语言·python·qt
郝学胜-神的一滴17 小时前
深入理解QFlags:Qt中的位标志管理工具
开发语言·c++·qt·程序人生
看到我,请让我去学习20 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
创想未来CTF20 小时前
Qt同步处理业务并禁用按钮
qt
谱写秋天1 天前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
前端市界2 天前
前端视角: PyQt6+Vue3 跨界开发实战
前端·qt·pyqt
誰能久伴不乏2 天前
Qt 动态属性(Dynamic Property)详解
开发语言·qt
枫叶丹42 天前
【Qt开发】常用控件(四)
开发语言·qt