(转载)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. }  

猜你喜欢

转载自blog.csdn.net/naibozhuan3744/article/details/80799842
今日推荐