Roson讲Qt #10 QProgressBar(进度条)
1.什么是QProgressBar
QProgressBar小部件提供一个水平或垂直的进度条。
进度条用于指示用户操作的进度,并向用户保证应用程序仍在运行。
进度条使用步骤的概念。您可以通过指定最小和最大可能的步骤值来设置它,当您稍后给它当前步骤值时,它将显示已经完成的步骤的百分比。百分比的计算方法是将progress (value() - minimum())除以maximum() - minimum()。
您可以使用setMinimum()和setMaximum指定最小和最大步骤数。当前的步骤数是用setValue()设置的。进度条可以用reset()重绕到开始。
如果最小值和最大值都设置为0,则条形图显示的是繁忙指示器,而不是步骤的百分比。这是有用的,例如,当使用QNetworkAccessManager下载项目时,他们无法确定正在下载的项目的大小。
下面的是不同风格的进度条:
2.QProgressBar使用
2.1 设置进度条数值的显示格式
ui.progressBar->setMaximum(50);
ui.progressBar->setMinimum(0);
ui.progressBar->setFormat("%p%");
使用“%p%”时,数值为当前值占最大值的百分比,数值最大会显示为100%
ui.progressBar->setMaximum(50);
ui.progressBar->setMinimum(0);
ui.progressBar->setFormat("%v%");
使用“%v%”时,数值为setValue传入的值。
ui.progressBar->setMaximum(50);
ui.progressBar->setMinimum(0);
ui.progressBar->setFormat("%m%");
使用“%m%”时,数值始终为设置的最大值,这里的示例会一直显示50%,不管进度条走到哪里。
2.2 设置进度条方向
ui.progressBar->setOrientation(Qt::Vertical);
setOrientation(Qt::Orientation)的参数只有有2个值可选:
- Qt::Horizontal (默认值)
- Qt::Vertical.
2.3 利用QTimer动态设置进度条的值
#ifndef QAPP8211_H
#define QAPP8211_H
#include <QtWidgets/QMainWindow>
#include "ui_qapp8211.h"
class QApp8211 : public QMainWindow
{
Q_OBJECT
public:
QApp8211(QWidget *parent = 0);
~QApp8211();
public slots:
void OnTimer();
private:
Ui::QApp8211Class ui;
int m_percent;
};
#endif // QAPP8211_H
#include "qapp8211.h"
#include "QDebug"
#include "QCalendarWidget"
#include <windows.h>
#include "QTimer"
QApp8211::QApp8211(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
m_percent = 0;
QTimer *timer = new QTimer(this);
timer->start(200);
connect(timer,SIGNAL(timeout()),this,SLOT(OnTimer()));
ui.progressBar->setMaximum(50);
ui.progressBar->setMinimum(0);
//获取当前进度
ui.progressBar->value();
}
QApp8211::~QApp8211()
{
}
void QApp8211::OnTimer()
{
ui.progressBar->setValue(m_percent);
m_percent += 2;
}
2.4 其它基本用法
//设置进度的最大值,一般是0-100,但这不是必须的。
ui.progressBar->setMaximum(50);
ui.progressBar->setMinimum(0);
//设置当前进度
ui.progressBar->setValue(50);
//获取当前进度
ui.progressBar->value();
//重置进度条
ui.progressBar->reset();
还没有评论,来说两句吧...