private:
QColor mColorBack=Qt::white; //背景颜色
QColor mColorBorder=Qt::black;//电池边框颜色
QColor mColorPower=Qt::green;//电量柱的颜色
QColor mColorWarning=Qt::red;//电量低时的颜色
int mPowerLevel=60;//电量0-100
int mWarningLevel=20;//电量低阈值
protected:
void paintEvent(QPaintEvent *event);// Q_DECL_OVERRIDE;
public:
void setPowerlevel(int pow); //设置当前电量
int powerlevel();
void setWarnLevel(int warn);//设置低电量阈值
int warnLevel();
QSize sizeHint();//缺省大小
signals:
void powerLevelChanged(int);
public:
explicit QmyBattery(QmyBattery*parent = nullptr);
~QmyBattery();
private slots:
void on_horizontalSlider_valueChanged(int value);
private:
Ui::QmyBattery*ui;
void QmyBattery::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
QRect rect(0,0,this->width(),this->height());
painter.setViewport(rect);
painter.setWindow(0,0,120,50);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::TextAntialiasing);
//绘制电池边框
QPen pen;
pen.setWidth(2);
pen.setColor(mColorBorder);
pen.setStyle(Qt::SolidLine);
pen.setCapStyle(Qt::FlatCap);
pen.setJoinStyle(Qt::BevelJoin);
painter.setPen(pen);
QBrush brush;
brush.setColor(mColorBack);
brush.setStyle(Qt::SolidPattern);
painter.setBrush(brush);
rect.setRect(1,1,109,48);
painter.drawRect(rect); //绘制边框
brush.setColor(mColorBorder);
painter.setBrush(brush);
rect.setRect(110,15,10,20);
painter.drawRect(rect); //画电池正极头
//画电池柱
if(mPowerLevel >mWarningLevel)
{
//正常颜色电池柱
brush.setColor(mColorPower);
pen.setColor(mColorPower);
}else {
brush.setColor(mColorWarning);
pen.setColor(mColorWarning);
}
painter.setBrush(brush);
painter.setPen(pen);
if(mPowerLevel >0)
{
rect.setRect(5,5,mPowerLevel,40);
painter.drawRect(rect); //画电池柱
}
//绘制电量百分比文字
QFontMetrics textSize(this->font());
QString powStr = QString::asprintf("%d%%",mPowerLevel);
QRect textRect = textSize.boundingRect(powStr); //得到字符串的RECT
painter.setFont(this->font());
pen.setColor(mColorBorder);
painter.setPen(pen);
painter.drawText(55-textRect.width()/2,23+textRect.height()/2,powStr);
}
void QmyBattery::setPowerlevel(int pow)
{
mPowerLevel=pow;
emit powerLevelChanged(pow);
repaint();
}
int QmyBattery::powerlevel()
{
return mPowerLevel;
}
void QmyBattery::setWarnLevel(int warn)
{
mWarningLevel=warn;
repaint();
}
int QmyBattery::warnLevel()
{
return mWarningLevel;
}
QSize QmyBattery::sizeHint()
{
int H= this->height();
int W= H*12/5;
QSize size(W,H);
return size;
}
void QmyBattery::on_horizontalSlider_valueChanged(int value)
{
ui->battery->setPowerLevel(value);
QString str = QStringLiteral("当前电量")+QString::asprintf("%d%%",value);
ui->label->setText(str);
}
![]()