#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();
}
}