1.QProgressBar基本用法
m_pConnectProBar = new QProgressBar;
m_pConnectProBar->setRange(0, 100); // 设置进度条最小值和最大值(取值范围)
m_pConnectProBar->setMinimum(0); // 设置进度条最小值
m_pConnectProBar->setMaximum(100); // 设置进度条最大值
m_pConnectProBar->setValue(50); // 设置当前的运行值
m_pConnectProBar->reset(); // 让进度条重新回到开始
m_pConnectProBar->setOrientation(Qt::Horizontal); // 水平方向
m_pConnectProBar->setOrientation(Qt::Vertical); // 垂直方向
m_pConnectProBar->setAlignment(Qt::AlignVCenter); // 文字对齐方式
m_pConnectProBar->setTextVisible(false); // 隐藏进度条文本
m_pConnectProBar->setFixedSize(258, 5); // 进度条固定大小
m_pConnectProBar->setInvertedAppearance(true); // true:反方向 false:正方向
m_pConnectProBar->setVisible(false); // false:隐藏进度条 true:显示进度条
2.读取方向
枚举QProgressBar::Direction
:指定垂直进度条文本的读取方向
QProgressBar::ToptoBottom:
值, 0; 描述: 文本是顺时针旋转了90度QProgressBar::BottomToTop:
值, 1; 描述: 文本是逆时针旋转了90度
这个属性对水平进度条没有影响。默认情况下,读取方向为:QProgressBar::TopToBottom
3、进度方向
当水平进度时,可以从左到右,也可以从右到左;同样,垂直显示进度时,可以从上到下,也可以从下到上。
QProgressBar* m_pLeftToRightProBar = new QProgressBar(this);
m_pLeftToRightProBar->setOrientation(Qt::Horizontal); // 水平方向
m_pLeftToRightProBar->setMinimum(0); // 最小值
m_pLeftToRightProBar->setMaximum(100); // 最大值
m_pLeftToRightProBar->setValue(50); // 当前进度
// //////////////////////////////////////////////////////////////////////////////////
QProgressBar* m_pRightToLeftProBar = new QProgressBar(this);
m_pRightToLeftProBar->setOrientation(Qt::Horizontal); // 水平方向
m_pRightToLeftProBar->setMinimum(0); // 最小值
m_pRightToLeftProBar->setMaximum(100); // 最大值
m_pRightToLeftProBar->setValue(50); // 当前进度
m_pRightToLeftProBar->setInvertedAppearance(true); // 反方向
4、文本显示
setFormat()
: 用于生成当前文本字串
%p%
: 百分比, 这是默认的显示方式%v
: 当前进度%m
: 总步数 ```cpp QProgressBar* m_pProgressBar = new QProgressBar(this);
m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向
m_pProgressBar->setMinimum(0); // 最小值 m_pProgressBar->setMaximum(4800); // 最大值 m_pProgressBar->setValue(2000); // 当前进度
double dProgress = (m_pProgressBar->value() - m_pProgressBar->minimum()) * 100.0 / (m_pProgressBar->maximum() - m_pProgressBar->minimum()); // 百分比计算公式
// m_pProgressBar->setFormat(QString::fromLocal8Bit(“当前进度为:%1%”) // .arg(QString::number(dProgress, ‘f’, 1))) m_pProgressBar->setFormat(tr(“Current progress : %1%”).arg(QString::number(dProgress, ‘f’, 1)));
m_pProgressBar->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); // 对齐方式
![](https://cdn.nlark.com/yuque/0/2020/png/2878535/1606181326923-942fd28f-7e94-4c23-9b3a-0ac8c3a3537e.png#align=left&display=inline&height=84&margin=%5Bobject%20Object%5D&originHeight=84&originWidth=339&size=0&status=done&style=none&width=339)
<a name="rlM8Y"></a>
## 5.繁忙指示
如果最小值和最大值都设置为0,进度条会显示了一个繁忙指示,而不会显示当前的值。
```cpp
QProgressBar *m_pProgressBar = new QProgressBar(this);
m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向
m_pProgressBar->setMinimum(0); // 最小值
m_pProgressBar->setMaximum(0); // 最大值
6.QSS美化
QProgressBar { /*默认显示*/
height:15px;
background: rgb(205,231,254);
border: 2px solid grey;
text-align: center;
border-radius: 5px;
}
QProgressBar::chunk { /*走过后的样式*/
background-color: #05B8CC;
width: 20px;
}
7.两种显示进度条的方式:QProgressBar和QProgressDialog
头文件:progressdlg.h
#include <QComboBox>
#include <QDialog>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>
#include <QPushButton>
class ProgressDlg : public QDialog {
Q_OBJECT
public:
ProgressDlg(QWidget* parent = Q_NULLPTR);
~ProgressDlg();
private slots:
void startProgress();
private:
QLabel* FileNum;
QLineEdit* FileNumLineEdit;
QLabel* ProgressType;
QComboBox* comboBox;
QProgressBar* progressBar;
QPushButton* starBtn;
QGridLayout* mainLayout;
};
progressdlg.cpp文件:
#include <QFont>
#include <QProgressDialog>
ProgressDlg::ProgressDlg(QWidget* parent)
: QDialog(parent)
{
QFont font("ZYSong18030", 12);
setFont(font);
setWindowTitle(QStringLiteral("Progress"));
FileNum = new QLabel;
FileNum->setText(QStringLiteral("file Count"));
FileNumLineEdit = new QLineEdit();
FileNumLineEdit->setText(QStringLiteral("100000"));
ProgressType = new QLabel();
ProgressType->setText(QStringLiteral("display type: "));
comboBox = new QComboBox();
comboBox->addItem(QStringLiteral("progressBar"));
comboBox->addItem(QStringLiteral("progressDialog"));
progressBar = new QProgressBar();
starBtn = new QPushButton();
starBtn->setText(QStringLiteral("start"));
mainLayout = new QGridLayout(this);
mainLayout->addWidget(FileNum, 0, 0);
mainLayout->addWidget(FileNumLineEdit, 0, 1);
mainLayout->addWidget(ProgressType, 1, 0);
mainLayout->addWidget(comboBox, 1, 1);
mainLayout->addWidget(progressBar, 2, 0, 1, 2);
mainLayout->addWidget(starBtn, 3, 1);
mainLayout->setMargin(15);
mainLayout->setSpacing(10);
connect(starBtn, SIGNAL(clicked()), this, SLOT(startProgress()));
}
ProgressDlg::~ProgressDlg()
{
}
void ProgressDlg::startProgress()
{
bool ok;
int num = FileNumLineEdit->text().toInt(&ok);
if (comboBox->currentIndex() == 0) { // ProgressBar
progressBar->setRange(0, num);
for (int i = 1; i < num + 1; i++) {
progressBar->setValue(i);
}
} else if (comboBox->currentIndex() == 1) { // ProgressDialog
// 创建一个进度对话框
QProgressDialog* progressDialog = new QProgressDialog(this);
QFont font("ZYSong18030", 12);
progressDialog->setFont(font);
// 设置进度对话框采用模态方式进行,即显示进度的同时,其他窗口将不响应输入信号
progressDialog->setWindowModality(Qt::WindowModal);
// 设置进度对话框出现需等待的时间,默认为4s
progressDialog->setMinimumDuration(5);
// 设置进度对话框的窗体标题
progressDialog->setWindowTitle(QStringLiteral("Please Wait"));
// 设置进度对话框的显示文字信息
progressDialog->setLabelText(QStringLiteral("Copying..."));
// 设置进度对话框的“取消”按钮的显示文字
progressDialog->setCancelButtonText(QStringLiteral("Cancel"));
progressDialog->setRange(0, num); //设置进度对话框的步进范围
for (int i = 1; i < num + 1; i++) {
progressDialog->setValue(i);
if (progressDialog->wasCanceled())
return;
}
}
}
CSDN论坛 使用: https://blog.csdn.net/hebbely/article/details/61418591 美化: https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar