QT自定义插件Battary

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);
}

 

posted @ 2021-07-26 09:51  Azuki_op  阅读(272)  评论(0)    收藏  举报