Qt模拟荣耀手机开机界面文字图标

荣耀手机开机界面时会出现HONOR字样,并且会有高光划过。
效果图1(默认效果):
在这里插入图片描述
效果图2(用户设置参数)
在这里插入图片描述
头文件

#ifndef QWHLABEL1_H
#define QWHLABEL1_H

#include <QLabel>
#include <QPaintEvent>
#include <QPainter>
#include <QPropertyAnimation>

class QWHLabel1 : public QLabel
{
    Q_OBJECT
    Q_ENUMS(State)
    Q_PROPERTY(int m_lightPos READ getLightPos WRITE setLightPos)
public:
    enum State
    {
        Stopped,    //停止
        Paused,     //暂停
        Running,    //运行
    };

    explicit QWHLabel1(QWidget *parent = nullptr);
    ~QWHLabel1();

    //设置文本大小
    void setTextPixel(int textPixel);
    //设置光线位置
    void setLightPos(int lightPos);
    //设置光线宽度
    void setLightWidth(int lightWidth);
    //设置背景颜色
    void setBgBrush(const QBrush &brush);
    //设置文本颜色
    void setTextBrush(const QBrush &brush);
    //设置光线颜色
    void setLightBrush(const QBrush &brush);

    //获取文本大小
    int getTextPixel()      const;
    //获取光线位置
    int getLightPos()       const;
    //获取光线宽度
    int getLightWidth()     const;
    //获取背景颜色
    QBrush getBgBrush()     const;
    //获取文本颜色
    QBrush getTextBrush()   const;
    //获取光线颜色
    QBrush getLightBrush()  const;

    //开始光线动画
    void start();
    //暂停光线动画
    void pause();
    //继续光线动画
    void resume();
    //停止光线动画
    void stop();

protected:
    void paintEvent(QPaintEvent *e);

signals:
    //状态改变时发送信号
    void stateChanged(State state);

public slots:

private:
    int m_textPixel;        //文本大小
    int m_lightPos;         //光线位置
    int m_lightWidth;       //光线宽度

    QBrush m_bgBrush;       //背景颜色
    QBrush m_textBrush;     //文本颜色
    QBrush m_lightBrush;    //光线颜色

    QPropertyAnimation *m_animation; //动画
};

#endif // QWHLABEL1_H

测试代码

int width = ui->label->width();
int height = ui->label->height();
//设置背景颜色
QLinearGradient bgLGradient(QPointF(0, 0), QPointF(width, height));
bgLGradient.setColorAt(0, QColor(111, 13, 178, 150));
bgLGradient.setColorAt(1, QColor(10, 115, 183, 150));
ui->label->setBgBrush(bgLGradient);
//设置文本颜色
ui->label->setTextBrush(QColor(154, 159, 162));
//设置光线颜色
QLinearGradient lightLGradient(QPointF(0, 0), QPointF(width, height));
lightLGradient.setColorAt(0, QColor(10, 115, 183));
lightLGradient.setColorAt(0.5, Qt::white);
lightLGradient.setColorAt(1, QColor(111, 13, 178));
lightLGradient.setSpread(QGradient::ReflectSpread);
ui->label->setLightBrush(lightLGradient);
ui->label->start();
发布了228 篇原创文章 · 获赞 44 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40945965/article/details/103794207