-
实现原理:该自定义精度条,用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