animate Raised Button

This commit is contained in:
FarmRadio Hangar 2016-05-18 15:08:11 +03:00
parent eab71e967c
commit 18fdf9c03c
2 changed files with 62 additions and 6 deletions

View File

@ -1,6 +1,10 @@
#include "raisedbutton.h" #include "raisedbutton.h"
#include <QGraphicsDropShadowEffect> #include <QGraphicsDropShadowEffect>
#include <QEventTransition> #include <QEventTransition>
#include <QPropertyAnimation>
#include <QPainter>
#include <QStylePainter>
#include <QStyleOption>
#include "raisedbutton_p.h" #include "raisedbutton_p.h"
void RaisedButtonPrivate::init() void RaisedButtonPrivate::init()
@ -9,37 +13,59 @@ void RaisedButtonPrivate::init()
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
effect->setBlurRadius(7); effect->setBlurRadius(7);
effect->setOffset(QPoint(0, 0)); effect->setOffset(QPointF(0, 0));
effect->setColor(QColor(0, 0, 0, 100)); effect->setColor(QColor(0, 0, 0, 100));
q->setGraphicsEffect(effect); q->setGraphicsEffect(effect);
q->setAutoFillBackground(true);
QState *normalState = new QState; QState *normalState = new QState;
QState *pressedState = new QState; QState *pressedState = new QState;
machine.addState(normalState); machine.addState(normalState);
machine.addState(pressedState); machine.addState(pressedState);
normalState->assignProperty(effect, "offset", QPoint(0, 0)); normalState->assignProperty(effect, "offset", QPointF(0, 0));
normalState->assignProperty(effect, "blurRadius", 7); normalState->assignProperty(effect, "blurRadius", 7);
pressedState->assignProperty(effect, "offset", QPoint(0, 6)); pressedState->assignProperty(effect, "offset", QPointF(0, 6));
pressedState->assignProperty(effect, "blurRadius", 20); pressedState->assignProperty(effect, "blurRadius", 20);
QAbstractTransition *transition; QAbstractTransition *transition;
QPropertyAnimation *animation;
//
transition = new QEventTransition(q, QEvent::MouseButtonPress); transition = new QEventTransition(q, QEvent::MouseButtonPress);
transition->setTargetState(pressedState); transition->setTargetState(pressedState);
animation = new QPropertyAnimation(effect, "offset");
animation->setDuration(100);
transition->addAnimation(animation);
animation = new QPropertyAnimation(effect, "blurRadius");
animation->setDuration(100);
transition->addAnimation(animation);
normalState->addTransition(transition); normalState->addTransition(transition);
//
transition = new QEventTransition(q, QEvent::MouseButtonRelease); transition = new QEventTransition(q, QEvent::MouseButtonRelease);
transition->setTargetState(normalState); transition->setTargetState(normalState);
animation = new QPropertyAnimation(effect, "offset");
transition->addAnimation(animation);
animation->setDuration(100);
animation = new QPropertyAnimation(effect, "blurRadius");
animation->setDuration(100);
transition->addAnimation(animation);
pressedState->addTransition(transition); pressedState->addTransition(transition);
//
machine.setInitialState(normalState); machine.setInitialState(normalState);
// add animation.. duration: 100 !!! QObject::connect(effect, SIGNAL(blurRadiusChanged(qreal)), q, SLOT(update()));
QObject::connect(effect, SIGNAL(offsetChanged(QPointF)), q, SLOT(update()));
machine.start(); machine.start();
} }
@ -55,3 +81,30 @@ RaisedButton::RaisedButton(QWidget *parent)
RaisedButton::~RaisedButton() RaisedButton::~RaisedButton()
{ {
} }
void RaisedButton::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
brush.setColor(Qt::white);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);
painter.drawRoundedRect(rect(), 3, 3);
QStylePainter style(this);
QStyleOptionButton option;
initStyleOption(&option);
option.features |= QStyleOptionButton::Flat;
style.drawControl(QStyle::CE_PushButtonLabel, option);
//FlatButton::paintEvent(event);
}

View File

@ -13,6 +13,9 @@ public:
explicit RaisedButton(QWidget *parent = 0); explicit RaisedButton(QWidget *parent = 0);
~RaisedButton(); ~RaisedButton();
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private: private:
Q_DISABLE_COPY(RaisedButton) Q_DISABLE_COPY(RaisedButton)
Q_DECLARE_PRIVATE(RaisedButton) Q_DECLARE_PRIVATE(RaisedButton)