天天看点

qt 自定义进度条

  • 实现原理:该自定义精度条,用label实现(正常应该用画图实现吧)
  • 实现效果:
    qt 自定义进度条
  • 实现代码:
  • 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

继续阅读