希望大家的生活都更加美好,画一朵花送给大家
效果图
void FloatingArrowPubshButton::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing);
QPen pen;
pen.setColor("green");
pen.setWidth(5);
QBrush brush;
brush.setColor("red");
brush.setStyle(Qt::SolidPattern);
painter.setPen(pen);
painter.setBrush(brush);
painter.drawLine(150, 300, 150, 500);
int flowerCount{6};
int radius{50};
for(int i{0};i<flowerCount;i++)
{
painter.save();
painter.translate(150, 300);
painter.rotate((360.0/flowerCount)*i);
painter.drawEllipse(-radius/2,-radius,radius,radius*2);
painter.restore();
}
}
2进一步提升1效果,让花在鼠标触碰到的时候发生变化
效果如下所示,点击后逐渐变成紫色
#include "floatingarrowpubshbutton.h"
#include <QPainter>
#include <QColor>
#include <QRect>
#include <QEvent>
FloatingArrowPubshButton::FloatingArrowPubshButton() {
animation_normal=new QPropertyAnimation(this, "m_Tomeido");
animation_normal->setDuration(300);
animation_normal->setStartValue(m_Tomeido);
animation_normal->setEndValue(255);
animation_normal->setEasingCurve(QEasingCurve::Linear);
// animation_parss=new QPropertyAnimation(this, "m_1");
// animation_parss->setDuration(3000);
// animation_parss->setStartValue(255);
// animation_parss->setEndValue(100);
// animation_parss->setEasingCurve(QEasingCurve::Linear);
connect(animation_normal, &QPropertyAnimation::valueChanged, this, [this](const QVariant &value) {
setTomeido(value.toInt());
update();
});
// connect(animation_parss, &QPropertyAnimation::valueChanged, this, [this](const QVariant &value) {
// 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);
qDebug()<<"m_Tomeido "<<m_Tomeido;
QPen pen;
pen.setColor(QColor(255, 0,m_Tomeido,255 ));
pen.setWidth(5);
QBrush brush;
brush.setColor(QColor(255, 0, 0, 127));
brush.setStyle(Qt::SolidPattern);
painter.setPen(pen);
painter.setBrush(brush);
painter.drawLine(150, 300, 150, 500);
int flowerCount{6};
int radius{50};
for(int i{0};i<flowerCount;i++)
{
painter.save();
painter.translate(150, 300);
painter.rotate((360.0/flowerCount)*i);
painter.drawEllipse(-radius/2,-radius,radius,radius*2);
painter.restore();
}
}
bool FloatingArrowPubshButton::event(QEvent *e)
{
if(e->type()==QEvent::Enter)
{
animation_normal->setDirection(QPropertyAnimation::Forward);
animation_normal->start();
}
if(e->type()==QEvent::Leave)
{
animation_normal->setDirection(QPropertyAnimation::Backward);
animation_normal->start();
}
return QPushButton::event(e);
}