qt柱状图控件设计

其他推荐内容:

1、效果满上
在这里插入图片描述
2、设计思路

继承QWidget控件类,重写paintEvent绘制事件函数,按照设置的数值绘制柱状图。

3、控件代码

h文件

#ifndef BarCharWidget_H
#define BarCharWidget_H

#include <QWidget>
#include <QPainter>

class BarCharWidget : public QWidget
{
    Q_OBJECT
public:
    explicit BarCharWidget(QWidget *parent = nullptr);

    void setValue(float value);
    float getValue();
    void setText(const QString &text);
signals:
public slots:
private:
    float mValue = 0;	
    QString mText;
    void paintEvent(QPaintEvent *paintEvent) override;
};
#endif // BarCharWidget_H

cpp文件

#include "barcharwidget.h"

BarCharWidget::BarCharWidget(QWidget *parent) : QWidget(parent)
{
}
void BarCharWidget::setValue(float value)
{
    mValue = value;
    this->update();
}

float BarCharWidget::getValue()
{
    return mValue;
    this->update();
}

void BarCharWidget::setText(const QString &text)
{
    mText = text;
}

void BarCharWidget::paintEvent(QPaintEvent *paintEvent)
{
    Q_UNUSED(paintEvent);
    QPainter painter(this);

    // 进度条最大高度
    float sliderMaxValue = this->height() * 0.9;

    //进度条高度
    float sliderHigh  = -this->height() * 0.8;

    //进度条宽度
    const int sliderWidth = 60;

    // 将坐标系的该点变成原点坐标
    painter.translate(this->width() * 0.3, sliderMaxValue);

    // 画进度值
    painter.setBrush(Qt::black);
    painter.drawText(sliderWidth - 40, sliderHigh - 10, QString::number(mValue,'f',2));
    painter.drawText(5, 30, mText);

    // 设置画笔为红色
    QPen pen(Qt::white, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
    painter.setPen(pen);

    // 画上面直线
    painter.drawLine(0, sliderHigh, sliderWidth, sliderHigh);
    // 画下面直线
    painter.drawLine(0, 0, sliderWidth, 0);
    // 画左边直线
    painter.drawLine(0, 0, 0, sliderHigh);
    // 画右边直线
    painter.drawLine(sliderWidth, 0, sliderWidth, sliderHigh);
    // 画上面直线线
    painter.drawLine(0, sliderHigh, sliderWidth, sliderHigh);

    //将矩形填充为白色
    QPolygon polyGon;
    polyGon<<QPoint(sliderWidth, 0);
    polyGon<<QPoint(sliderWidth, sliderHigh);
    polyGon<<QPoint(0, sliderHigh);
    polyGon<<QPoint(0, 0);
    painter.setBrush(Qt::white);
    painter.drawConvexPolygon(polyGon);

    //设置渐变
    QLinearGradient linerGradient = QLinearGradient(0, 0, 0, sliderHigh);
    linerGradient.setColorAt(0.0, Qt::cyan);
    linerGradient.setColorAt(0.3, Qt::green);
    linerGradient.setColorAt(0.7, Qt::yellow);
    linerGradient.setColorAt(1.0, Qt::red);

    QBrush brush(linerGradient);
    painter.setBrush(brush);

    painter.drawRect(QRectF(0, 0, sliderWidth, sliderHigh * mValue / 100));
    painter.end();
}

4、使用方法
使用界面提升的方式添加该柱状图控件。
demo核心代码如下(mainwindows构造函数中添加):

    ui->widget->setText("柱状图1");
    ui->widget->setValue(0);
    
    ui->widget_2->setText("柱状图2");
    ui->widget_2->setValue(25);
    
    mTime.start(10);
    connect(&mTime,QTimer::timeout,this,[=](){
        if(ui->widget_2->getValue() >= 99.9)
        {
            mTime.stop();
            return 0;
        }
        ui->widget_2->setValue(ui->widget_2->getValue()+0.1);
        ui->widget->setValue(ui->widget->getValue()+0.1);
    });
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值