我是靠谱客的博主 勤恳书本,最近开发中收集的这篇文章主要介绍Qt中QProgressBar的用法1、 QProgressBar基本用法2、 读取方向3、进度方向4、文本显示5、繁忙指示6、两种显示进度条的方式:QProgressBar和QProgressDialog,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简述:

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. }



最后

以上就是勤恳书本为你收集整理的Qt中QProgressBar的用法1、 QProgressBar基本用法2、 读取方向3、进度方向4、文本显示5、繁忙指示6、两种显示进度条的方式:QProgressBar和QProgressDialog的全部内容,希望文章能够帮你解决Qt中QProgressBar的用法1、 QProgressBar基本用法2、 读取方向3、进度方向4、文本显示5、繁忙指示6、两种显示进度条的方式:QProgressBar和QProgressDialog所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部