qt 自定义进度条

  • 实现原理:该自定义精度条,用label实现(正常应该用画图实现吧)

  • 实现效果:
    在这里插入图片描述

  • 实现代码:

  • progress.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
QT_BEGIN_NAMESPACE
class Progress : public QWidget
{
    Q_OBJECT

public:
    Progress(QWidget *parent = nullptr);
    ~Progress();

    void setFixedSize(int,int);         //设置进度条长宽
    void setValue(int);                 //设置进度条当前值
    void setBackStyleSheet(QString);    //设置进度条背景样式
    void setProgressStyleSheet(QString);//设置进度条样式

    QLabel* m_textInfo;                 //设置进度条文本
private:
    QLabel* m_labelBack;
    QLabel* m_label;
    int width;
};
#endif // WIDGET_H

  • progress.cpp:
#include "progress.h"
#include "ui_widget.h"
Progress::Progress(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowFlags(Qt::FramelessWindowHint);          //隐藏窗口
    this->setAttribute(Qt::WA_TranslucentBackground, true); //窗口透明

    m_labelBack = new QLabel(this);
    m_label = new QLabel(this);
    m_textInfo = new QLabel(this);
    m_labelBack->setObjectName("backgress");
    m_label->setObjectName("gress");
    /*默认值设置*/
    m_labelBack->setStyleSheet("QLabel#backgress{background-color:rgb(233,233,233);"
                               "border-radius:3px;}");
    m_label->setStyleSheet("QLabel#gress{background-color:qlineargradient"
                           "(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #87CEFA,stop:1 #1E90FF);"
                           "border-radius:3px;}");
    width = 400;
    resize(width,30);
    m_labelBack->setFixedSize(width,30);
    m_label->setFixedSize(0,30);
    m_textInfo->setFixedSize(50,30);
    m_textInfo->setAlignment(Qt::AlignCenter);

}

Progress::~Progress()
{
}

void Progress::setFixedSize(int w, int h)
{
    width = w;
    resize(width,h);
    m_labelBack->setFixedSize(width,h);
    m_label->setFixedHeight(h);
    m_textInfo->move(w/2 - 25,h/2 - 15);
}

void Progress::setValue(int number)
{
    float tmp = float(width)/100;
    m_label->setFixedWidth(number*tmp);
    m_textInfo->setText(QString("%1%").arg(number));
}

void Progress::setBackStyleSheet(QString style)
{
    m_labelBack->setStyleSheet(QString("QLabel#backgress{%1}").arg(style));
}

void Progress::setProgressStyleSheet(QString style)
{
    m_label->setStyleSheet(QString("QLabel#gress{%1}").arg(style));
}

源码: 链接
密码: w8p0

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过继承 QProgressBar 类并重新实现绘制函数来自定义 Qt 进度条。 以下是一个示例代码: ```cpp #include <QtWidgets> class CustomProgressBar : public QProgressBar { public: explicit CustomProgressBar(QWidget* parent = nullptr) : QProgressBar(parent) { setMinimum(0); setMaximum(100); } protected: void paintEvent(QPaintEvent* event) override { QPainter painter(this); // 绘制背景 painter.fillRect(rect(), Qt::white); // 绘制进度条 int progressWidth = static_cast<int>(rect().width() * static_cast<double>(value()) / maximum()); QRect progressRect(rect().topLeft(), QSize(progressWidth, rect().height())); painter.fillRect(progressRect, Qt::blue); // 绘制文本 QString text = QString::number(value()) + "%"; painter.setPen(Qt::black); painter.drawText(rect(), Qt::AlignCenter, text); } }; int main(int argc, char** argv) { QApplication app(argc, argv); QMainWindow mainWindow; QWidget* centralWidget = new QWidget(&mainWindow); QVBoxLayout* layout = new QVBoxLayout(centralWidget); CustomProgressBar* progressBar = new CustomProgressBar(&mainWindow); progressBar->setValue(50); layout->addWidget(progressBar); mainWindow.setCentralWidget(centralWidget); mainWindow.show(); return app.exec(); } ``` 在此示例中,我们创建了一个名为 `CustomProgressBar` 的自定义进度条类。我们重新实现了 `paintEvent` 函数来绘制自己的进度条样式。在这个示例中,我们使用白色作为背景,蓝色作为进度条的颜色,并在进度条上方绘制了当前的进度文本。 您可以根据自己的需求修改绘制函数以实现您想要的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值