本博客完全轉載如下地址內容,如有侵權,請通知博主,博主會及時刪除。轉載博客原地址:
https://blog.csdn.net/hebbely/article/details/61418591
簡述:
Qt提供了兩種顯示進度條的方式:一種是QProgressBar,提供了一種橫向或者縱向顯示進度的控件表示方式,用來描述任務的完成情況;另一種是QProgressDialog,提供了一種針對慢速過程的進度對話框表示方式,用於描述任務完成的進度情況。標準的進度條對話框包括一個進度顯示條、一個取消按鈕及一個標籤。
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
3、進度方向
當水平進度時,可以從左到右,也可以從右到左;同樣,垂直顯示進度時,可以從上到下,也可以從下到上。
[cpp] view plain copy
- 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() :用於生成當前文本字串
[cpp] view plain copy%p% : 百分比,這是默認的顯示方式
%v : 當前進度
%m : 總步數
- 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); // 對齊方式
如果要顯示百分比,可以直接使用“%p%” (比如:41%);
setAlignment() ,可以指定顯示文本的對齊方式;
5、繁忙指示
如果最小值和最大值都設置爲0,進度條會顯示了一個繁忙指示,而不會顯示當前的值。
QProgressBar *m_pProgressBar = new QProgressBar(this);m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向m_pProgressBar->setMinimum(0); // 最小值m_pProgressBar->setMaximum(0); // 最大值
6、兩種顯示進度條的方式:QProgressBar和QProgressDialog
頭文件:progressdlg.h
[cpp] view plain copy
- #ifndef PROGRESSDLG_H
- #define PROGRESSDLG_H
- #include <QDialog>
- #include <QLabel>
- #include <QLineEdit>
- #include <QProgressBar>
- #include <QComboBox>
- #include <QPushButton>
- #include <QGridLayout>
- class ProgressDlg : public QDialog
- {
- Q_OBJECT
- public:
- ProgressDlg(QWidget *parent = 0);
- ~ProgressDlg();
- private slots:
- void startProgress();
- private:
- QLabel *FileNum;
- QLineEdit *FileNumLineEdit;
- QLabel *ProgressType;
- QComboBox *comboBox;
- QProgressBar *progressBar;
- QPushButton *starBtn;
- QGridLayout *mainLayout;
- };
- #endif // PROGRESSDLG_H
progressdlg.cpp文件:
[cpp] view plain copy
- #include "progressdlg.h"
- #include <QProgressDialog>
- #include <QFont>
- ProgressDlg::ProgressDlg(QWidget *parent)
- : QDialog(parent)
- {
- QFont font("ZYSong18030",12);
- setFont(font);
- setWindowTitle(tr("Progress"));
- FileNum =new QLabel;
- FileNum->setText(tr("文件數目:"));
- FileNumLineEdit =new QLineEdit;
- FileNumLineEdit->setText(tr("100000"));
- ProgressType =new QLabel;
- ProgressType->setText(tr("顯示類型:"));
- comboBox =new QComboBox;
- comboBox->addItem(tr("progressBar"));
- comboBox->addItem(tr("progressDialog"));
- progressBar =new QProgressBar;
- starBtn =new QPushButton();
- starBtn->setText(tr("開始"));
- 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(tr("Please Wait"));
- //設置進度對話框的顯示文字信息
- progressDialog->setLabelText(tr("Copying..."));
- //設置進度對話框的“取消”按鈕的顯示文字
- progressDialog->setCancelButtonText(tr("Cancel"));
- progressDialog->setRange(0,num); //設置進度對話框的步進範圍
- for(int i=1;i<num+1;i++)
- {
- progressDialog->setValue(i);
- if(progressDialog->wasCanceled())
- return;
- }
- }
- }