轉載)Qt5.9進度條QProgressBar用法詳解

本博客完全轉載如下地址內容,如有侵權,請通知博主,博主會及時刪除。轉載博客原地址:

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
  1. QProgressBar *m_pLeftToRightProBar = new QProgressBar(this);  
  2. m_pLeftToRightProBar->setOrientation(Qt::Horizontal);  // 水平方向  
  3. m_pLeftToRightProBar->setMinimum(0);  // 最小值  
  4. m_pLeftToRightProBar->setMaximum(100);  // 最大值  
  5. m_pLeftToRightProBar->setValue(50);  // 當前進度  
  6.   
  7. QProgressBar *m_pRightToLeftProBar = new QProgressBar(this);  
  8. m_pRightToLeftProBar->setOrientation(Qt::Horizontal);  // 水平方向  
  9. m_pRightToLeftProBar->setMinimum(0);  // 最小值  
  10. m_pRightToLeftProBar->setMaximum(100);  // 最大值  
  11. m_pRightToLeftProBar->setValue(50);  // 當前進度  
  12. m_pRightToLeftProBar->setInvertedAppearance(true);  // 反方向  

 

 

4、文本顯示

setFormat()  :用於生成當前文本字串

%p%  : 百分比,這是默認的顯示方式

%v     : 當前進度

%m    : 總步數

[cpp] view plain copy
  1. QProgressBar *m_pProgressBar = new QProgressBar(this);  
  2. m_pProgressBar->setOrientation(Qt::Horizontal);  // 水平方向  
  3. m_pProgressBar->setMinimum(0);  // 最小值  
  4. m_pProgressBar->setMaximum(4800);  // 最大值  
  5. m_pProgressBar->setValue(2000);  // 當前進度  
  6. double dProgress = (m_pProgressBar->value() - m_pProgressBar->minimum()) * 100.0  
  7.                 / (m_pProgressBar->maximum() - m_pProgressBar->minimum()); // 百分比計算公式  
  8.   m_pProgressBar->setFormat(QString::fromLocal8Bit("當前進度爲:%1%").arg(QString::number(dProgress, 'f', 1)))  
  9. m_pProgressBar->setFormat(tr("Current progress : %1%").arg(QString::number(dProgress, 'f', 1)));  
  10. 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
  1. #ifndef PROGRESSDLG_H  
  2. #define PROGRESSDLG_H  
  3.   
  4. #include <QDialog>  
  5. #include <QLabel>  
  6. #include <QLineEdit>  
  7. #include <QProgressBar>  
  8. #include <QComboBox>  
  9. #include <QPushButton>  
  10. #include <QGridLayout>  
  11.   
  12. class ProgressDlg : public QDialog  
  13. {  
  14.     Q_OBJECT  
  15.       
  16. public:  
  17.     ProgressDlg(QWidget *parent = 0);  
  18.     ~ProgressDlg();  
  19. private slots:  
  20.     void startProgress();  
  21. private:  
  22.     QLabel *FileNum;  
  23.     QLineEdit *FileNumLineEdit;  
  24.     QLabel *ProgressType;  
  25.     QComboBox *comboBox;  
  26.     QProgressBar *progressBar;  
  27.     QPushButton *starBtn;  
  28.     QGridLayout *mainLayout;  
  29. };  
  30.   
  31. #endif // PROGRESSDLG_H  

progressdlg.cpp文件:

[cpp] view plain copy
  1. #include "progressdlg.h"  
  2. #include <QProgressDialog>  
  3. #include <QFont>  
  4. ProgressDlg::ProgressDlg(QWidget *parent)  
  5.     : QDialog(parent)  
  6. {  
  7.     QFont font("ZYSong18030",12);  
  8.     setFont(font);  
  9.     setWindowTitle(tr("Progress"));  
  10.   
  11.     FileNum =new QLabel;  
  12.     FileNum->setText(tr("文件數目:"));  
  13.     FileNumLineEdit =new QLineEdit;  
  14.     FileNumLineEdit->setText(tr("100000"));  
  15.   
  16.     ProgressType =new QLabel;  
  17.     ProgressType->setText(tr("顯示類型:"));  
  18.     comboBox =new QComboBox;  
  19.     comboBox->addItem(tr("progressBar"));  
  20.     comboBox->addItem(tr("progressDialog"));  
  21.   
  22.     progressBar =new QProgressBar;  
  23.   
  24.     starBtn =new QPushButton();  
  25.     starBtn->setText(tr("開始"));  
  26.   
  27.     mainLayout =new QGridLayout(this);  
  28.     mainLayout->addWidget(FileNum,0,0);  
  29.     mainLayout->addWidget(FileNumLineEdit,0,1);  
  30.     mainLayout->addWidget(ProgressType,1,0);  
  31.     mainLayout->addWidget(comboBox,1,1);  
  32.     mainLayout->addWidget(progressBar,2,0,1,2);  
  33.     mainLayout->addWidget(starBtn,3,1);  
  34.     mainLayout->setMargin(15);  
  35.     mainLayout->setSpacing(10);  
  36.   
  37.     connect(starBtn,SIGNAL(clicked()),this,SLOT(startProgress()));  
  38. }  
  39.   
  40. ProgressDlg::~ProgressDlg()  
  41. {  
  42.       
  43. }  
  44.   
  45. void ProgressDlg::startProgress()  
  46. {  
  47.     bool ok;  
  48.     int num =FileNumLineEdit->text().toInt(&ok);  
  49.   
  50.     if(comboBox->currentIndex()==0)                   //ProgressBar  
  51.     {  
  52.         progressBar->setRange(0,num);  
  53.         for(int i=1;i<num+1;i++)  
  54.         {  
  55.             progressBar->setValue(i);  
  56.         }  
  57.     }  
  58.     else if(comboBox->currentIndex()==1)             //ProgressDialog  
  59.     {  
  60.         //創建一個進度對話框  
  61.         QProgressDialog *progressDialog=new QProgressDialog(this);  
  62.         QFont font("ZYSong18030",12);  
  63.         progressDialog->setFont(font);  
  64.         //設置進度對話框採用模態方式進行,即顯示進度的同時,其他窗口將不響應輸入信號  
  65.         progressDialog->setWindowModality(Qt::WindowModal);  
  66.         //設置進度對話框出現需等待的時間,默認爲4s  
  67.         progressDialog->setMinimumDuration(5);  
  68.         //設置進度對話框的窗體標題  
  69.         progressDialog->setWindowTitle(tr("Please Wait"));  
  70.         //設置進度對話框的顯示文字信息  
  71.         progressDialog->setLabelText(tr("Copying..."));  
  72.         //設置進度對話框的“取消”按鈕的顯示文字  
  73.         progressDialog->setCancelButtonText(tr("Cancel"));  
  74.         progressDialog->setRange(0,num); //設置進度對話框的步進範圍  
  75.         for(int i=1;i<num+1;i++)  
  76.         {  
  77.             progressDialog->setValue(i);  
  78.             if(progressDialog->wasCanceled())  
  79.                 return;  
  80.         }  
  81.     }  
  82. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章