1.QProgressBar基本用法

  1. m_pConnectProBar = new QProgressBar;
  2. m_pConnectProBar->setRange(0, 100); // 设置进度条最小值和最大值(取值范围)
  3. m_pConnectProBar->setMinimum(0); // 设置进度条最小值
  4. m_pConnectProBar->setMaximum(100); // 设置进度条最大值
  5. m_pConnectProBar->setValue(50); // 设置当前的运行值
  6. m_pConnectProBar->reset(); // 让进度条重新回到开始
  7. m_pConnectProBar->setOrientation(Qt::Horizontal); // 水平方向
  8. m_pConnectProBar->setOrientation(Qt::Vertical); // 垂直方向
  9. m_pConnectProBar->setAlignment(Qt::AlignVCenter); // 文字对齐方式
  10. m_pConnectProBar->setTextVisible(false); // 隐藏进度条文本
  11. m_pConnectProBar->setFixedSize(258, 5); // 进度条固定大小
  12. m_pConnectProBar->setInvertedAppearance(true); // true:反方向 false:正方向
  13. m_pConnectProBar->setVisible(false); // false:隐藏进度条 true:显示进度条

2.读取方向

枚举QProgressBar::Direction:指定垂直进度条文本的读取方向

  • QProgressBar::ToptoBottom: 值, 0; 描述: 文本是顺时针旋转了90度
  • QProgressBar::BottomToTop: 值, 1; 描述: 文本是逆时针旋转了90度

这个属性对水平进度条没有影响。默认情况下,读取方向为: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. // //////////////////////////////////////////////////////////////////////////////////
  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); // 反方向

QProgressBar - 图1

4、文本显示

setFormat(): 用于生成当前文本字串

  • %p%: 百分比, 这是默认的显示方式
  • %v: 当前进度
  • %m: 总步数 ```cpp QProgressBar* m_pProgressBar = new QProgressBar(this);

m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向

m_pProgressBar->setMinimum(0); // 最小值 m_pProgressBar->setMaximum(4800); // 最大值 m_pProgressBar->setValue(2000); // 当前进度

double dProgress = (m_pProgressBar->value() - m_pProgressBar->minimum()) * 100.0 / (m_pProgressBar->maximum() - m_pProgressBar->minimum()); // 百分比计算公式

// m_pProgressBar->setFormat(QString::fromLocal8Bit(“当前进度为:%1%”) // .arg(QString::number(dProgress, ‘f’, 1))) m_pProgressBar->setFormat(tr(“Current progress : %1%”).arg(QString::number(dProgress, ‘f’, 1)));

m_pProgressBar->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); // 对齐方式

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/2878535/1606181326923-942fd28f-7e94-4c23-9b3a-0ac8c3a3537e.png#align=left&display=inline&height=84&margin=%5Bobject%20Object%5D&originHeight=84&originWidth=339&size=0&status=done&style=none&width=339)
  2. <a name="rlM8Y"></a>
  3. ## 5.繁忙指示
  4. 如果最小值和最大值都设置为0,进度条会显示了一个繁忙指示,而不会显示当前的值。
  5. ```cpp
  6. QProgressBar *m_pProgressBar = new QProgressBar(this);
  7. m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向
  8. m_pProgressBar->setMinimum(0); // 最小值
  9. m_pProgressBar->setMaximum(0); // 最大值

6.QSS美化

  1. QProgressBar { /*默认显示*/
  2. height:15px;
  3. background: rgb(205,231,254);
  4. border: 2px solid grey;
  5. text-align: center;
  6. border-radius: 5px;
  7. }
  8. QProgressBar::chunk { /*走过后的样式*/
  9. background-color: #05B8CC;
  10. width: 20px;
  11. }

进度条.png

7.两种显示进度条的方式:QProgressBar和QProgressDialog

QProgressBar - 图3

头文件:progressdlg.h

  1. #include <QComboBox>
  2. #include <QDialog>
  3. #include <QGridLayout>
  4. #include <QLabel>
  5. #include <QLineEdit>
  6. #include <QProgressBar>
  7. #include <QPushButton>
  8. class ProgressDlg : public QDialog {
  9. Q_OBJECT
  10. public:
  11. ProgressDlg(QWidget* parent = Q_NULLPTR);
  12. ~ProgressDlg();
  13. private slots:
  14. void startProgress();
  15. private:
  16. QLabel* FileNum;
  17. QLineEdit* FileNumLineEdit;
  18. QLabel* ProgressType;
  19. QComboBox* comboBox;
  20. QProgressBar* progressBar;
  21. QPushButton* starBtn;
  22. QGridLayout* mainLayout;
  23. };

progressdlg.cpp文件:

  1. #include <QFont>
  2. #include <QProgressDialog>
  3. ProgressDlg::ProgressDlg(QWidget* parent)
  4. : QDialog(parent)
  5. {
  6. QFont font("ZYSong18030", 12);
  7. setFont(font);
  8. setWindowTitle(QStringLiteral("Progress"));
  9. FileNum = new QLabel;
  10. FileNum->setText(QStringLiteral("file Count"));
  11. FileNumLineEdit = new QLineEdit();
  12. FileNumLineEdit->setText(QStringLiteral("100000"));
  13. ProgressType = new QLabel();
  14. ProgressType->setText(QStringLiteral("display type: "));
  15. comboBox = new QComboBox();
  16. comboBox->addItem(QStringLiteral("progressBar"));
  17. comboBox->addItem(QStringLiteral("progressDialog"));
  18. progressBar = new QProgressBar();
  19. starBtn = new QPushButton();
  20. starBtn->setText(QStringLiteral("start"));
  21. mainLayout = new QGridLayout(this);
  22. mainLayout->addWidget(FileNum, 0, 0);
  23. mainLayout->addWidget(FileNumLineEdit, 0, 1);
  24. mainLayout->addWidget(ProgressType, 1, 0);
  25. mainLayout->addWidget(comboBox, 1, 1);
  26. mainLayout->addWidget(progressBar, 2, 0, 1, 2);
  27. mainLayout->addWidget(starBtn, 3, 1);
  28. mainLayout->setMargin(15);
  29. mainLayout->setSpacing(10);
  30. connect(starBtn, SIGNAL(clicked()), this, SLOT(startProgress()));
  31. }
  32. ProgressDlg::~ProgressDlg()
  33. {
  34. }
  35. void ProgressDlg::startProgress()
  36. {
  37. bool ok;
  38. int num = FileNumLineEdit->text().toInt(&ok);
  39. if (comboBox->currentIndex() == 0) { // ProgressBar
  40. progressBar->setRange(0, num);
  41. for (int i = 1; i < num + 1; i++) {
  42. progressBar->setValue(i);
  43. }
  44. } else if (comboBox->currentIndex() == 1) { // ProgressDialog
  45. // 创建一个进度对话框
  46. QProgressDialog* progressDialog = new QProgressDialog(this);
  47. QFont font("ZYSong18030", 12);
  48. progressDialog->setFont(font);
  49. // 设置进度对话框采用模态方式进行,即显示进度的同时,其他窗口将不响应输入信号
  50. progressDialog->setWindowModality(Qt::WindowModal);
  51. // 设置进度对话框出现需等待的时间,默认为4s
  52. progressDialog->setMinimumDuration(5);
  53. // 设置进度对话框的窗体标题
  54. progressDialog->setWindowTitle(QStringLiteral("Please Wait"));
  55. // 设置进度对话框的显示文字信息
  56. progressDialog->setLabelText(QStringLiteral("Copying..."));
  57. // 设置进度对话框的“取消”按钮的显示文字
  58. progressDialog->setCancelButtonText(QStringLiteral("Cancel"));
  59. progressDialog->setRange(0, num); //设置进度对话框的步进范围
  60. for (int i = 1; i < num + 1; i++) {
  61. progressDialog->setValue(i);
  62. if (progressDialog->wasCanceled())
  63. return;
  64. }
  65. }
  66. }

CSDN论坛 使用: https://blog.csdn.net/hebbely/article/details/61418591 美化: https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar