- 實作原理:該自定義精度條,用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