(转载)Qt5.9进度条QProgressBar用法详解

  • Post author:
  • Post category:其他


本博客完全转载如下地址内容,如有侵权,请通知博主,博主会及时删除。转载博客原地址:

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、进度方向


当水平进度时,可以从左到右,也可以从右到左;同样,垂直显示进度时,可以从上到下,也可以从下到上。



  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. QProgressBar *m_pRightToLeftProBar =

    new


    QProgressBar(


    this


    );


  7. m_pRightToLeftProBar->setOrientation(Qt::Horizontal);

    // 水平方向




  8. m_pRightToLeftProBar->setMinimum(0);

    // 最小值




  9. m_pRightToLeftProBar->setMaximum(100);

    // 最大值




  10. m_pRightToLeftProBar->setValue(50);

    // 当前进度




  11. m_pRightToLeftProBar->setInvertedAppearance(

    true


    );


    // 反方向




4、文本显示



setFormat()

:用于生成当前文本字串



%p%

: 百分比,这是默认的显示方式



%v

: 当前进度



%m

: 总步数



  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



  1. #ifndef PROGRESSDLG_H





  2. #define PROGRESSDLG_H






  3. #include <QDialog>





  4. #include <QLabel>





  5. #include <QLineEdit>





  6. #include <QProgressBar>





  7. #include <QComboBox>





  8. #include <QPushButton>





  9. #include <QGridLayout>






  10. class


    ProgressDlg :


    public


    QDialog


  11. {

  12. Q_OBJECT



  13. public


    :


  14. ProgressDlg(QWidget *parent = 0);

  15. ~ProgressDlg();


  16. private


    slots:



  17. void


    startProgress();



  18. private


    :


  19. QLabel *FileNum;

  20. QLineEdit *FileNumLineEdit;

  21. QLabel *ProgressType;

  22. QComboBox *comboBox;

  23. QProgressBar *progressBar;

  24. QPushButton *starBtn;

  25. QGridLayout *mainLayout;

  26. };



  27. #endif // PROGRESSDLG_H



progressdlg.cpp文件:



  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. FileNum =

    new


    QLabel;


  11. FileNum->setText(tr(

    “文件数目:”


    ));


  12. FileNumLineEdit =

    new


    QLineEdit;


  13. FileNumLineEdit->setText(tr(

    “100000”


    ));



  14. ProgressType =

    new


    QLabel;


  15. ProgressType->setText(tr(

    “显示类型:”


    ));


  16. comboBox =

    new


    QComboBox;


  17. comboBox->addItem(tr(

    “progressBar”


    ));


  18. comboBox->addItem(tr(

    “progressDialog”


    ));



  19. progressBar =

    new


    QProgressBar;



  20. starBtn =

    new


    QPushButton();


  21. starBtn->setText(tr(

    “开始”


    ));



  22. mainLayout =

    new


    QGridLayout(


    this


    );


  23. mainLayout->addWidget(FileNum,0,0);

  24. mainLayout->addWidget(FileNumLineEdit,0,1);

  25. mainLayout->addWidget(ProgressType,1,0);

  26. mainLayout->addWidget(comboBox,1,1);

  27. mainLayout->addWidget(progressBar,2,0,1,2);

  28. mainLayout->addWidget(starBtn,3,1);

  29. mainLayout->setMargin(15);

  30. mainLayout->setSpacing(10);


  31. connect(starBtn,SIGNAL(clicked()),

    this


    ,SLOT(startProgress()));


  32. }


  33. ProgressDlg::~ProgressDlg()

  34. {


  35. }



  36. void


    ProgressDlg::startProgress()


  37. {


  38. bool


    ok;



  39. int


    num =FileNumLineEdit->text().toInt(&ok);




  40. if


    (comboBox->currentIndex()==0)


    //ProgressBar




  41. {

  42. progressBar->setRange(0,num);


  43. for


    (


    int


    i=1;i<num+1;i++)


  44. {

  45. progressBar->setValue(i);

  46. }

  47. }


  48. else




    if


    (comboBox->currentIndex()==1)


    //ProgressDialog




  49. {


  50. //创建一个进度对话框




  51. QProgressDialog *progressDialog=

    new


    QProgressDialog(


    this


    );


  52. QFont font(

    “ZYSong18030”


    ,12);


  53. progressDialog->setFont(font);


  54. //设置进度对话框采用模态方式进行,即显示进度的同时,其他窗口将不响应输入信号




  55. progressDialog->setWindowModality(Qt::WindowModal);


  56. //设置进度对话框出现需等待的时间,默认为4s




  57. progressDialog->setMinimumDuration(5);


  58. //设置进度对话框的窗体标题




  59. progressDialog->setWindowTitle(tr(

    “Please Wait”


    ));



  60. //设置进度对话框的显示文字信息




  61. progressDialog->setLabelText(tr(

    “Copying…”


    ));



  62. //设置进度对话框的“取消”按钮的显示文字




  63. progressDialog->setCancelButtonText(tr(

    “Cancel”


    ));


  64. progressDialog->setRange(0,num);

    //设置进度对话框的步进范围





  65. for


    (


    int


    i=1;i<num+1;i++)


  66. {

  67. progressDialog->setValue(i);


  68. if


    (progressDialog->wasCanceled())



  69. return


    ;


  70. }

  71. }

  72. }