当前位置:   article > 正文

进度条--QProgressBar,进度对话框--QProgressDialog

qprogressbar

一、QProgressBar 进度条

1、QProgressBar 类继承自 QWidget,它是一个 QWidget 部件, QProgressBar 除了将其放置
于进度对话框之中外,还可将其放置于窗口的状态栏等其他部件中。
QProgressBar提供了一个水平或垂直的进度条,可以使用setMinimum()和setMaximum指定最小和最大步数。当前的步数是用setValue()设置的。进度条可以用reset()重绕到开头。

2、常用函数

void setMaximum(int maximum)设置最大值
void setMinimum(int minimum)设置最小值
void setRange(int minimum,int maximum)设置范围,最大、最小值
void setValue(int value)设置当前值
void reset()重置
void setOrientation(Qt::Orientation)设置方向,垂直,水平
void setAlignment(Qt::Alignment alignment)设置对齐方式,居中,左、右
void setTextVisible(bool visible)设置进度条文本是香显示
void setInvertedAppearance(bool invert)设置正、反
void setFormat(const QString &format)设置文本式显示格式

3、QProgressBar类中的属性
①、 alignment: Qt::Alignment
访问函数: Qt::Alignment alignment()const; void setAlignment(Qt::Alignment);
获取和设置进度条的对齐方式


②、 format: QString
访问函数: QString format() const; void setFormat(constQString&); void resetFormat();
设置进度条右侧描述性文字的显示格式,默认为"%p%",具体规定如下:
%p:显示的数值为百分比。

%v:显示的数值为当前设置的值。
%m:显示的数值为进度条的范围值。
示例(各情形见图示):
QProgressBar *pg=new QProgressBar;
pg->setMinimum(100); pg->setMaximum(1100); pg->setValue(800);


③、 invertedAppearance: bool
访问函数: bool invertedAppearance() const; void setInvertedAppearance(bool);
是否反转进度条,若该属性为 true,则进度条会从另一个方向增长(比如从右到左),默
认为 false。


④、 maximum: int 访问函数: int maximum() const; void setMaximum(int);
进度条的最大值。 默认为 100。
⑤、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
进度条的最小值。 默认为 0。
当最小值和最大值都为 0 时,进度条会显示为一个繁忙的状态 (如上图所示)。
若指定的新的当前值超出了进度条的最大或最小值,则对之前设置的当前值没有影响。
若当前值超出了进度条新设置的最大或最小值,则重置进度条(示例见 QPrgressDialog
类)。

⑥、 value: int 访问函数: int value() const; void setValue(int);
信号: valueChanged(int);

获取和设置进度条的当前值,若指定的当前值超出了进度条的最大或最小值,则对之
前设置的当前值没有影响。


⑦、 orientation: Qt::Orientation
访问函数: Qt::Orientation orientation() const; void setOrientation(Qt::Orientation);
进度条的方向,必须是 Qt::Horizontal (水平,默认) 或 Qt::Vertical (垂直)


⑧、 text: const QString 访问函数: virtual QString text() const;
返回进度条右侧的描述性文本,比如返回"50%"等。


⑨、 textDirection: Direction
访问函数: QProgressBar::Direction textDirection()const;void setTextDirection(QProgressBar::Direction);
描述垂直进度条描述性文字的阅读方向,该属于对水平进度条无影响。默认为
QProgressBar::TopToBottom (从上到下)


⑩、 textVisible: bool 访问函数: bool isTextVisible() const; void setTextVisible(bool);
描述是否显示进度条的描述性文字(通常显示为百分比),默认为 true。该属性可能会被
样式忽略。

4、 QProgressBar类中的函数
①、 QProgressBar(QWidget* parent = Q_NULLPTR); //构造函数
②、 void reset(); //槽,重置进度条
③、 void setRange(int min, int max); //槽,设置进度条的范围(即最小值和最大值)。
④、 void valueChanged(int value); //信号
当进度条中显示的值发生变化时发送此信号, value 为进度条显示的新值。

  1. //1.正向显示
  2. pProgressBar = new QProgressBar(this);
  3. pProgressBar->move(50, 100);
  4. pProgressBar->setOrientation(Qt::Horizontal); // 水平方向
  5. pProgressBar->setMinimum(0); // 最小值
  6. pProgressBar->setMaximum(100); // 最大值
  7. pProgressBar->setValue(50); // 当前进度
  8. //2.反方向显示
  9. pProgressBar2 = new QProgressBar(this);
  10. pProgressBar2->move(200, 100);
  11. pProgressBar2->setOrientation(Qt::Horizontal); // 水平方向
  12. pProgressBar2->setMinimum(0); // 最小值
  13. pProgressBar2->setMaximum(100); // 最大值
  14. pProgressBar2->setValue(50); // 当前进度
  15. pProgressBar2->setInvertedAppearance(true); // 反方向
  16. //3.百分比
  17. pProgressBar3 = new QProgressBar(this);
  18. pProgressBar3->move(100, 150);
  19. pProgressBar3->setOrientation(Qt::Horizontal); // 水平方向
  20. pProgressBar3->setMinimum(0); // 最小值
  21. pProgressBar3->setMaximum(4800); // 最大值
  22. pProgressBar3->setValue(2000); // 当前进度
  23. double dProgress = (pProgressBar3->value() - pProgressBar3->minimum()) * 100.0
  24. / (pProgressBar3->maximum() - pProgressBar3->minimum());
  25. //fromLocal8Bit:它将一个本地编码的QByteArray对象转换为一个QString对象
  26. //QString::number(dProgress, 'f', 1):显示fload类型,保留1位小数。将替换掉前方的 %1
  27. pProgressBar3->setFormat(QString::fromLocal8Bit("当前进度为:%1%").arg(QString::number(dProgress, 'f', 1)));
  28. pProgressBar3->setAlignment(Qt::AlignRight | Qt::AlignVCenter); // 对齐方式
  29. //4.如果最小值和最大值都设置为0,进度条会显示了一个 繁忙指示
  30. pProgressBar4 = new QProgressBar(this);
  31. pProgressBar4->move(100, 200);
  32. pProgressBar4->setOrientation(Qt::Horizontal); // 水平方向
  33. pProgressBar4->setMinimum(0); // 最小值
  34. pProgressBar4->setMaximum(0); // 最大值
  35. //5. 进度条对话框
  36. progressDlg = new QProgressDialog;
  37. //progressDlg->setWindowModality(Qt::WindowModal);
  38. progressDlg->setMinimumDuration(0);//dialog出现需等待的时间
  39. progressDlg->setWindowTitle("Please Wait...");//
  40. progressDlg->setAutoClose(0); //当进度条显示到 100%时 不隐藏
  41. progressDlg->setAutoReset(0); //当进度条显示到 100%时 不调用reset()函数重置进度条
  42. progressDlg->setLabelText("Copying...");//设置进度对话框标签文本,向用户提示该进度条正在做什么
  43. progressDlg->setCancelButtonText("Cancel");//重新设置 Cancel按钮 的文本
  44. progressDlg->setRange(0, 100);
  45. for (int i = 0;i <= 100;i += 1) {
  46. progressDlg->setValue(i);
  47. }

二、进度对话框 QProgressDialog

1、进度对话框主要用于向用户反应当前操作进度的对话框(见右图),
该对话框也是 Qt 预定义的标准对话框。
2、进度对话框包含一个进度条(QProgressBar),以及其他一些相关
的子部件。


3、 Qt 实现的进 度对话框的原理及执行过程
①、 QProgressDialog 的构造函数,会启动一个默认为 4000 毫秒的计时器,当计时器超时
时,会显示该进度对话框,也就是说只要创建了 QProgressDialog 对象,即使程序中没
有显示该对话框的 show()语句(或类似语句),该对话框 4 秒之后仍会被显示出来。因
此使用进度对话框时,不需要显示的调用 show()语句(或类似语句)显示该对话框,程
序会在超时之后自动显示。


②、重置计时器: QProgressDialog::setValue()函数可以重新启动计时器,其规则如下:
 需使用 0 或 QProgressDialog::minmum()调用 setValue()函数。
 此时使用 setMinimumDuration()函数设置的时间才能作为计时器的超时时间,也
就是说该函数此时才起作用,否则该函数不起作用。

setMinimumDuration()函数后,必须紧跟一个setValue(0) 才能起作用!
示例:

QProgressDialog *pp = new QProgressDialog;
pp->setMinimumDuration(10000); //使对话框在 10 秒之后显示
pp->setValur(0); //必须使用此步骤,否则 setMinimumDuration()函数设置的值将不起作用。
//不需使用 pp->show()或类似语句来显示对话框 pp。
以上程序会在 10 秒之后自动显示一个进度为 0%的进度对话框。


③、若进度对话框的完成时间比超时时间更短,则进度对话框不会被显示。比如
QProgressDialog *pp = new QProgressDialog;
for(int i=0; i<1001;i++) pp->setValue(i*100/1000); //对话框不会显示,很明显计算机计算 1001 次循环
不需要 4 秒时间,因此最终该对话框未被显示出来。


4、进度对话框的一些其他规则
①、基本规则:进度对话框在操作完成时(即当前值等于最大值或显示为 100%时),默认
会自动重置并且隐藏对话框。隐藏和重置由 autoClose 和 autoReset 属性控制(详见下
文)
②、若指定的新的当前值超出了进度条的最大或最小值,则对之前设置的当前值没有影响。
若当前值超出了进度条新设置的最大或最小值,则重置进度条。 这两条规则对设置最
大最小值和当前值的顺序作了规定,不同顺序会产生不同影响。
示例:

QProgressDialog *pp = new QProgressDialog;
pp->setValue(80);
//默认最小值为 0,最大值为 100。

pp->setValue(222); //当前值仍为 80。
pp->setMaximum(40); //当前值 80 大于新设置的最大值 40,重置进度条为 0。
③、 若重新设置最大值为当前值,则进度对话框不会被隐藏。此规则规定了设置最大值应
在设置当前值之前。
④、 若进度条的最大和最小值都设置为 0,则进度条不再显示百分比,而会指示一个繁忙
的状态,见下图。


5、下图为 Qt 对进度对话框外观进行的描述

6、 QProgressDialog 类中的属性
①、 autoClose: bool 访问函数: bool autoClose() const; void setAutoClose(bool);
指示 reset()函数是否隐藏对话框,若 autoClose()为 true,则 reset()函数会隐藏对话框,
若为 flase 则不会隐藏对话框,默认为 true。


②、 autoReset: bool 访问函数: bool autoReset() const; void setAutoReset(bool);

进度对话框是否在value()等于maximum时立即调用reset(),若为true则立即调用reset()
函数,若为 false 则不调用 reset()函数。默认为 true。
以上两属性可对进度对话框实现如下操作
 autoClose = false; autoReset = true; 不隐藏但重置对话框
 autoClose = false; autoReset = false; 既不隐藏也不重置对话框
 autoClose = true; autoReset = false; 因为未调用 reset()函数,所以既不重置也不
隐藏对话框。也就是说不能设置为既隐藏对话框而又不重置对话框。
 autoClose = true; autoReset = true; 隐藏且重置对话框。


③、 labelText: QString 访问函数: QString labelText() const; void setLlabelText(const QString&);
获取和设置进度对话框的标签文本。默认为空字符串。


④、 maximum: int 访问函数: int maximum() const; void setMaximum(int);
获取和设置进度条所表示的最大值。默认为 100。


⑤、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
获取和设置进度条所表示的最小值。默认为 0。


⑥、 value: int 访问函数: int value() const; void setValue(int);
获取和设置进度对话框的当前值。注意:若进度对话框是模态的,则 setValue()调用
QApplication::processEvents(),因此不要在 paintEvent()函数中使用进度对话框。


⑦、 wasCanceled: const bool 访问函数: bool wasCanceled() const;
若进度对话框已被取消则为 1,否则为 0。若该属性为 1,则直到进度对话框被重置(即
调用 reset()函数)为止都会一直为 1。

注意:关闭进度对话框后,此属性值为1;重新显示后,此属性为0


⑧、 minimumDuration: int 访问函数: int minimumDuration() const;

void setMinimumDuration(int );
显示进度对话框之前需经过的时间, 若为 0,则会立即显示进度对话框,默认为 4000。


7、 QProgressDialog 类中的函数
①、 QProgressDialog(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int min,
int max, QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
以上为构造函数,各参数意 义如下:
labelText:进度对话框的标签文本。
cancelButtonText:取消按钮文本,若该参数为 QString()(注意:不是空字符串),则不
显示取消按钮。
min 和 max 分别表示进度条的最小和最大值。


②、 void open(QObject* receiver, const char* member);
显示进度对话框,并把 canceled()信号连接到由 receiver 和 member 指定的槽,关闭对
话框时,信号和槽将被断开。


③、 void cancel(); //槽
隐藏并重置进度对话框,且设置 wasCanceled 属性为 1。


④、 void reset(); //槽
重置进度对话框,若 autoClose 属性为 true,则进度对话框会隐藏,若该属性为 false,
则不会隐藏进度对话框。 注意:该函数会把 wasCancel 属性重置为 false。


⑤、 void setRange(int min, int max); //槽

设置进度条的范围(即最小值和最大值)。


⑥、 void setBar(QProgressBar* bar);
把进度对话框的进度条设置为 bar,注意:进度对话框会获取进度条 bar 的所有权,在
必要时会删除进度条,因此不要使用在栈上分配的进度条。


⑦、 void setLabel(QLabel* label);
把进度对话框的标签设置为 label。注意:进度对话框会获取 label 的所有权,在必要
时会将其删除,因此不要在栈上分配 label。


⑧、 void setCancelButton(QPushButton* cancelButton);
把进度对话框的取消按钮设置为 cancelButton,若设置为 0,则不会显示取消按钮。注
意:进度对话框会获取 cancelButton 的所有权,在必要时会将其删除,因此不要使用
在栈上分配的按钮。


⑨、 void setCancelButtonText(const QString &cancelButtonText); //槽
把取消按钮的文本设置为 cancelButtonText,若设置为 QString()(注意:不是空字符串),
则删除取消按钮。


⑩、 void forceShow(); //槽,受保护的
QProgressDialog 的构造函数使用此函数显示进度对话框, 注意:该函数不是虚拟的,
因此重写该函数并不能改变构造函数的默认行为。


⑪、 void canceled(); //信号
当点击 Cancel 按钮时发送此信号,此信号默认连接到 QProgressDialog::cancel()槽函数
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/264377
推荐阅读
相关标签
  

闽ICP备14008679号