ScreenLockDetector/src/customwidget.h

108 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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