1.项目背景
充电式移动端设备GUI需要显示设备的电池电量,以及充/放电模式,便于用户实时查看设备电量状态,合理使用。
注:本文参考作者(火山上的企鹅)Qt Widget 之电池控件(QPainter)_qpainter widget-CSDN博客
新增了一些功能,显示电池充/放电,以及自定义一些设置。
2.项目环境
Qt 5.15.2
Desktop Qt 5.15.2 MinGW 64-Bit
3.项目效果
4.部分代码解析
4.1 QPaintEvent跟QPainter
QPaintEvent是 Qt 中的一个事件类,用于触发绘图操作。是 QWidget 继承自 QEvent 的子类。通常在以下情况下被触发:
a.当窗口需要被绘制时,即需要更新窗口的外观或内容时;
b.当调用 QWidget 的 update() 函数或 repaint() 函数来触发窗口重绘时;
QPainter类在窗口和其他绘制设备上执行低级绘制,提供高度优化的功能来完成大多数图形用户界面程序所需的工作。能画出从简单线条到复杂形状如饼图和弦等一切图形。它还可以绘制对齐的文本和像素图。
/** *******************************************************************
* @Function : paintEvent
* @Parameter : QPaintEvent
* @Return : 无
* @Author : hx
* @Description : 重写绘制事件
* @Date : 2024-10-25 14:24:44
******************************************************************* **/
void hBattery::paintEvent(QPaintEvent * event)
{
Q_UNUSED(event);
//绘制准备工作,启用反锯齿
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
//1.绘制边框和头部
fDrawBorder(&painter);
//2.绘制填充
fDrawBackground(&painter);
//3.内部百分比
fDrawText(&painter);
//4.是否充电
if(m_IsRecharge)
fDrawLightning(&painter);
}
5.代码展示
5.1 hbattery.h
#ifndef HBATTERY_H
#define HBATTERY_H
#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QRandomGenerator>
class hBattery : public QWidget
{
Q_OBJECT
public:
explicit hBattery(QWidget *parent = nullptr);
void fSetBatteryValue(int batteryValue);
void fSetBatteryStatus(bool isRecharge);
void fSetColorstyle(const QPen &borderPen, const QPen &textPen, const QPen &lightingPen);
void fSetTextFont(const QFont &textFont);
void fSetBatteryStep(int minValue, int maxValue);
void fSetBatterySize(int width, int height);
protected:
void paintEvent(QPaintEvent *);
private slots:
void fRechargeRun();
priva