通過qt中的painter繪圖事件繪制一個電池電量圖的變化。效果如下圖
創建一個基于界面widget工程,在wdiget界面添加一個widget界面,將添加的widget界面的類提升為Tbattery.在Tbattery類中重寫painEvent電池電量代碼
文件目錄結構
主要部分代碼
//Tbattery.cpp
#include "tbattery.h"
#include<QPainter>
#include<QPaintEvent>
Tbattery::Tbattery(QWidget *parent): QWidget{parent}
{}int Tbattery::warningLevel() const
{return m_warningLevel;
}void Tbattery::setWarningLevel(int newWarningLevel)
{m_warningLevel=newWarningLevel;repaint();
}int Tbattery::powerLevel() const
{return m_powerLevel;
}void Tbattery::setPowerLevel(int newPowerLevel)
{m_powerLevel = newPowerLevel;repaint();
}void Tbattery::paintEvent(QPaintEvent *event)
{QPainter painter(this);QRect rect(0,0,width(),height());painter.setViewport(rect);//設置屏幕坐標painter.setWindow(0,0,120,50);//設置邏輯坐標painter.setRenderHint(QPainter::TextAntialiasing);painter.setRenderHint(QPainter::Antialiasing);QPen pen(colorBorder);pen.setWidth(1);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::FlatCap);pen.setJoinStyle(Qt::BevelJoin);painter.setPen(pen);QBrush brush(colorBackgroud);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);//繪制邊框rect.setRect(1,1,109,48);painter.drawRect(rect);brush.setColor(colorBorder);painter.setBrush(brush);rect.setRect(110,15,10,20);painter.drawRect(rect);if(m_powerLevel>m_warningLevel){brush.setColor(colorPower);pen.setColor(colorPower);}else{brush.setColor(colorWarning);pen.setColor(colorWarning);}painter.setPen(pen);painter.setBrush(brush);if(m_powerLevel>0){rect.setRect(5,5,m_powerLevel,40);painter.drawRect(rect);}QString powStr=QString::asprintf("%d%%",m_powerLevel);QFontMetrics textSize(this->font());QRect textRect=textSize.boundingRect(powStr);painter.setFont(this->font());pen.setColor(colorBorder);painter.setPen(pen);painter.drawText(55-textRect.width()/2,25+textRect.height()/2,powStr);event->accept();
}
//Tbattery.h/#ifndef TBATTERY_H
#define TBATTERY_H#include <QWidget>class Tbattery : public QWidget
{Q_OBJECT
public:explicit Tbattery(QWidget *parent = nullptr);int warningLevel() const;void setWarningLevel(int newWarningLevel);int powerLevel() const;void setPowerLevel(int newPowerLevel);private:QColor colorBackgroud=Qt::white;QColor colorBorder=Qt::black;QColor colorPower=Qt::green;QColor colorWarning=Qt::red;int m_powerLevel = 60;int m_warningLevel = 20;signals:// QWidget interface
protected:virtual void paintEvent(QPaintEvent *event) override;
};#endif // TBATTERY_H