• 大小: 10KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: Qt界面  

资源简介

模拟电量进度条 模拟电量进度条

资源截图

代码片段和文件信息

#pragma execution_character_set(“utf-8“)

#include “battery.h“
#include “qpainter.h“
#include “qtimer.h“
#include “qdebug.h“

Battery::Battery(QWidget *parent) : QWidget(parent)
{
    minValue = 0;
    maxValue = 100;
    value = 0;
    alarmValue = 30;
    step = 0.5;

    borderColorStart = QColor(100 100 100);
    borderColorEnd = QColor(80 80 80);
    alarmColorStart = QColor(250 118 113);
    alarmColorEnd = QColor(204 38 38);
    normalColorStart = QColor(50 205 51);
    normalColorEnd = QColor(60 179 133);

    isForward = false;
    currentValue = 0;

    timer = new QTimer(this);
    timer->setInterval(10);
    connect(timer SIGNAL(timeout()) this SLOT(updateValue()));
}

Battery::~Battery()
{
    if (timer->isActive()) {
        timer->stop();
    }
}

void Battery::paintEvent(QPaintEvent *)
{
    //绘制准备工作启用反锯齿
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

    //绘制边框
    drawBorder(&painter);
    //绘制背景
    drawBg(&painter);
}

void Battery::drawBorder(QPainter *painter)
{
    painter->save();
    double headWidth = width() / 10;
    double batteryWidth = width() - headWidth;

    //绘制电池边框
    QPointF topLeft(5 5);
    QPointF bottomRight(batteryWidth height() - 5);
    batteryRect = QRectF(topLeft bottomRight);

    painter->setPen(QPen(borderColorStart 5));
    painter->setBrush(Qt::NoBrush);
    painter->drawRoundRect(batteryRect 10 20);

    //绘制电池头部
    QPointF headRectTopLeft(batteryRect.topRight().x() height() / 3);
    QPointF headRectBottomRight(width() height() - height() / 3);
    QRectF headRect(headRectTopLeft headRectBottomRight);

    QLinearGradient headRectGradient(headRect.topLeft() headRect.bottomLeft());
    headRectGradient.setColorAt(0.0 borderColorStart);
    headRectGradient.setColorAt(1.0 borderColorEnd);

    painter->setBrush(headRectGradient);
    painter->drawRoundRect(headRect 15 25);
    painter->restore();
}

void Battery::drawBg(QPainter *painter)
{
    painter->save();
    QLinearGradient batteryGradient(QPointF(0 0) QPointF(0 height()));

    if (currentValue <= alarmValue) {
        batteryGradient.setColorAt(0.0 alarmColorStart);
        batteryGradient.setColorAt(1.0 alarmColorEnd);
    } else {
        batteryGradient.setColorAt(0.0 normalColorStart);
        batteryGradient.setColorAt(1.0 normalColorEnd);
    }

    painter->setPen(Qt::NoPen);
    painter->setBrush(batteryGradient);

    int margin = qMin(width() height()) / 20;
    double unit = (batteryRect.width() - (margin * 2)) / 100;
    double width = currentValue * unit;
    QPointF topLeft(batteryRect.topLeft().x() + margin batteryRect.topLeft().y() + margin);
    QPointF bottomRight(width + margin + 5 batteryRect.bottomRight().y() - margin);
    QRectF rect(topLeft bottomRight);

    painter->drawRoundRect(rect 10 10);
    painter->

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-28 18:05  battery\
     文件        7349  2017-02-07 17:30  battery\battery.cpp
     文件        4471  2017-02-10 17:11  battery\battery.h
     文件         484  2017-02-08 09:47  battery\battery.pro
     文件       23782  2017-12-28 18:05  battery\battery.pro.user
     文件        8299  2017-01-11 10:18  battery\flatui.cpp
     文件        1848  2017-02-08 09:42  battery\flatui.h
     文件         382  2017-01-06 21:21  battery\frmbattery.cpp
     文件         297  2017-01-06 21:17  battery\frmbattery.h
     文件        1554  2017-01-06 21:20  battery\frmbattery.ui
     文件         183  2017-02-08 09:46  battery\main.cpp

评论

共有 条评论