QT自定义控件(电池)

做一个电池控件,需要一个拖动条和一个进度条。
不多说,直接上代码
.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QProgressBar>
#include <QSlider>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

protected slots:
    void on_SliderValueChange();

private:
    QSlider *m_pSlider=nullptr;
    QProgressBar *m_batteryBar=nullptr;
};

#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include <QVBoxLayout>
#include <QLabel>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QWidget *batterytopwgt=new QWidget(this);
    QLabel *topLabel=new QLabel(this);
    topLabel->setStyleSheet("background:black");
    QVBoxLayout *topLayout=new QVBoxLayout(this);
    topLayout->addStretch();
    topLayout->addWidget(topLabel);
    topLayout->addStretch();
    topLayout->setMargin(0);
    batterytopwgt->setLayout(topLayout);


    QVBoxLayout *mainLayout=new QVBoxLayout(this);
    m_pSlider=new QSlider(Qt::Horizontal,this);   //将拖动条设置为横向
    m_pSlider->setRange(0,100);   //设置拖动条范围
    m_batteryBar=new QProgressBar(this);
    m_batteryBar->setRange(0,100);
    m_batteryBar->setFixedHeight(50);
    m_batteryBar->setFixedWidth(100);
    m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:green}");  //设置样式
    mainLayout->addWidget(m_batteryBar);
    mainLayout->addWidget(m_pSlider);
    mainLayout->setMargin(0);
    mainLayout->addStretch();
    this->setLayout(mainLayout);

    connect(m_pSlider,&QSlider::valueChanged,this,&Widget::on_SliderValueChange);   //拖动条每次值改变都会执行
}

Widget::~Widget()
{

}

void Widget::on_SliderValueChange()
{
    int sliderValue=m_pSlider->value();
    m_batteryBar->setValue(sliderValue);

    if(m_batteryBar->value()<=20)  //如果值小于20,则颜色为红色
    {
        m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:red}");
    }
    else  //大于20则值为绿色
    {
         m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:green}");
    }
}


main.cpp文件

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

效果图:

在这里插入图片描述

这个我做的很简单,不过原理基本上是这样的。电池的样式可以根据自己喜好进行绘制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油小杜(接qt定制功能,单模块开发等)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值