无聊做一个微信红包控件。
效果图
头文件
#ifndef QWHWEIXINPACKET_H
#define QWHWEIXINPACKET_H
/*
* 模仿微信红包
*/
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QPixmap>
#include <QPropertyAnimation>
#include <QMouseEvent>
class QWHWeiXinPacket : public QWidget
{
Q_OBJECT
Q_PROPERTY(int m_rotate READ getRotate WRITE setRotate)
public:
explicit QWHWeiXinPacket(QWidget *parent = nullptr);
public:
//设置头像
void setPixmap(const QPixmap &pixmap);
//设置昵称
void setName(const QString &name);
//设置祝福语
void setText(const QString &text);
//获取头像
QPixmap getPixmap() const;
//获取昵称
QString getName() const;
//获取祝福语
QString getText() const;
QSize sizeHint();
protected:
void paintEvent(QPaintEvent *event);
//绘制背景
void drawBg(QPainter *painter);
//绘制左上角×
void drawClose(QPainter *painter);
//绘制头像
void drawHeadImage(QPainter *painter);
//绘制文本
void drawText(QPainter *painter);
//绘制铜钱
void drawCopper(QPainter *painter);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
void setRotate(int rotate);
int getRotate() const;
signals:
//点击X时,发送关闭信号
void closeSignal();
public slots:
private:
int m_rotate; //坐标轴旋转角度属性
bool m_inCloseArea; //鼠标是否在×区域
QString m_name; //昵称
QString m_text; //祝福语
QColor m_topBgColor; //背景颜色上部分
QColor m_bottomBgColor; //背景颜色下部部分
QColor m_splitBgColor; //圆弧分割线颜色
QColor m_textColor; // 文本颜色
QColor m_copperColor; //铜钱线条颜色
QPixmap m_pixmap; //头像
QPropertyAnimation *m_animation; //属性动画
};
#endif // QWHWEIXINPACKET_H