108 lines
2.6 KiB
C++
108 lines
2.6 KiB
C++
#ifndef CUSTOMWIDGET_H
|
||
#define CUSTOMWIDGET_H
|
||
|
||
#include <QWidget>
|
||
#include <QPainter>
|
||
#include <QTimer>
|
||
#include <QDateTime>
|
||
#include <QColor>
|
||
#include <QLinearGradient>
|
||
|
||
/**
|
||
* @brief 自定义绘制组件类
|
||
*
|
||
* 这个组件会持续进行动画绘制,展示屏幕锁定检测的效果
|
||
* 当屏幕锁定时,会自动停止所有Paint事件
|
||
*/
|
||
class CustomWidget : public QWidget
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
explicit CustomWidget(QWidget *parent = nullptr);
|
||
~CustomWidget();
|
||
|
||
/**
|
||
* @brief 启用或禁用绘制
|
||
* @param enabled true表示启用绘制,false表示禁用
|
||
*/
|
||
void setPaintingEnabled(bool enabled);
|
||
|
||
/**
|
||
* @brief 获取当前绘制状态
|
||
* @return true表示绘制已启用,false表示已禁用
|
||
*/
|
||
bool isPaintingEnabled() const;
|
||
|
||
/**
|
||
* @brief 获取绘制帧数统计
|
||
* @return 已绘制的总帧数
|
||
*/
|
||
int getPaintFrameCount() const;
|
||
|
||
/**
|
||
* @brief 重置帧数计数器
|
||
*/
|
||
void resetFrameCount();
|
||
|
||
protected:
|
||
/**
|
||
* @brief 重写paintEvent以实现自定义绘制
|
||
* @param event 绘制事件
|
||
*/
|
||
void paintEvent(QPaintEvent *event) override;
|
||
|
||
private slots:
|
||
/**
|
||
* @brief 动画定时器槽函数
|
||
*/
|
||
void onAnimationTimer();
|
||
|
||
private:
|
||
/**
|
||
* @brief 绘制动态背景
|
||
* @param painter 绘制器
|
||
*/
|
||
void drawBackground(QPainter &painter);
|
||
|
||
/**
|
||
* @brief 绘制旋转的圆圈
|
||
* @param painter 绘制器
|
||
*/
|
||
void drawRotatingCircles(QPainter &painter);
|
||
|
||
/**
|
||
* @brief 绘制波浪效果
|
||
* @param painter 绘制器
|
||
*/
|
||
void drawWaveEffect(QPainter &painter);
|
||
|
||
/**
|
||
* @brief 绘制状态信息
|
||
* @param painter 绘制器
|
||
*/
|
||
void drawStatusInfo(QPainter &painter);
|
||
|
||
/**
|
||
* @brief 绘制锁屏信息
|
||
* @param painter 绘制器
|
||
*/
|
||
void drawLockInfo(QPainter &painter);
|
||
|
||
private:
|
||
QTimer *m_animationTimer; // 动画定时器
|
||
bool m_paintingEnabled; // 绘制是否启用
|
||
int m_frameCount; // 帧数计数器
|
||
double m_rotationAngle; // 旋转角度
|
||
double m_wavePhase; // 波浪相位
|
||
QDateTime m_startTime; // 开始时间
|
||
QDateTime m_pauseTime; // 暂停时间
|
||
QDateTime m_lastLockTime; // 上次锁屏时间
|
||
qint64 m_lastLockDuration; // 上次锁屏持续时长(秒)
|
||
int m_lastLockFrameCount; // 上次锁屏时的帧数
|
||
int m_lockPaintFrameCount; // 锁屏期间绘制的帧数
|
||
int m_lockCount; // 锁屏次数
|
||
};
|
||
|
||
#endif // CUSTOMWIDGET_H
|