按钮的波纹特效

#ifndef FLOATINGARROWPUBSHBUTTON_H
#define FLOATINGARROWPUBSHBUTTON_H
#include <QPushButton>
#include <QPropertyAnimation>
#include <QMouseEvent>
class FloatingArrowPubshButton:public QPushButton
{
    Q_OBJECT
    Q_PROPERTY(int m_Tomeido WRITE setTomeido NOTIFY valueChanged)
public:
    enum AnimationState {
        Execute,
        Restore
    };

    FloatingArrowPubshButton();
    void setTomeido(int newTomeido);
protected:
    void paintEvent(QPaintEvent* event)override;
    void mousePressEvent(QMouseEvent* event)override;
    QPropertyAnimation *animation_normal;
    QPropertyAnimation* animation_parss;
    int m_Tomeido = 0;
    QPoint mouse_coordinates;
signals:
    void execute_animation_signal(FloatingArrowPubshButton::AnimationState state);
};

#endif
#include "floatingarrowpubshbutton.h"
#include <QPainter>
#include <QColor>
#include <QRect>
#include <QEvent>
FloatingArrowPubshButton::FloatingArrowPubshButton() {
    animation_normal=new QPropertyAnimation(this, "m_Tomeido");
    animation_normal->setDirection(QPropertyAnimation::Backward);
    animation_normal->setDuration(500);
    animation_normal->setStartValue(m_Tomeido);
    animation_normal->setEndValue(255);
    animation_normal->setEasingCurve(QEasingCurve::Linear);

    connect(animation_normal, &QPropertyAnimation::valueChanged, this, [this](const QVariant &value) {
        setTomeido(value.toInt());
        qDebug()<<1 ;
        update();
    });


}

void FloatingArrowPubshButton::setTomeido(int newTomeido)
{
        if (m_Tomeido == newTomeido)
            return;
        m_Tomeido = newTomeido;
}

void FloatingArrowPubshButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    painter.setRenderHints(QPainter::Antialiasing);
    //painter.setPen(Qt::NoPen);

    QPen pen;
    pen.setColor(QColor(135, 206, 235, m_Tomeido));
    pen.setWidth(3);
    painter.setPen(pen);

    QBrush brush;
    brush.setStyle(Qt::SolidPattern);
    brush.setColor(QColor(135, 206, 235, m_Tomeido));
    painter.setBrush(brush);
    painter.drawEllipse(mouse_coordinates,255-m_Tomeido, 255-m_Tomeido);


}

void FloatingArrowPubshButton::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        mouse_coordinates=event->pos();
        animation_normal->start();

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值