C++ Qt开发:ProgressBar进度条组件

打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。
ProgressBar(进度条)是在Qt中常用的用户界面组件之一,用于显示任务的完成进度。它通常以一个水平或垂直的条形图形式展示,表示任务已完成的比例。进度条组件提供了一种直观的方式来显示任务的进度,让用户清晰地了解任务的完成情况。其还可根据需要在水平或垂直方向上显示,以适应不同的界面布局。
以下是QProgressBar类的一些常用方法的说明和概述,以表格形式列出:
方法描述QProgressBar(QWidget *parent = nullptr)构造函数,创建一个组件对象。setRange(int minimum, int maximum)设置组件的范围,即任务的最小和最大值。setValue(int value)设置组件的当前值,即任务已完成的进度。value() const获取组件的当前值。setMinimum(int minimum)设置组件的最小值。setMaximum(int maximum)设置组件的最大值。reset()重置组件,将当前值设置为最小值。minimum() const获取组件的最小值。maximum() const获取组件的最大值。text() const获取组件显示的文本,通常是百分比值。setFormat(const QString &format)设置组件显示文本的格式,支持百分比等。setAlignment(Qt::Alignment alignment)设置组件文本的对齐方式。setInvertedAppearance(bool invert)设置组件是否显示为反向进度(从右到左)。setOrientation(Qt::Orientation orientation)设置组件的方向,可以是水平或垂直。setStyleSheet(const QString &styleSheet)设置组件的样式表。setFormat(const QString &format)设置组件的显示格式。setAlignment(Qt::Alignment alignment)设置组件文本的对齐方式。这些方法提供了对QProgressBar进行配置、管理和与之交互的灵活性。你可以根据具体的应用需求使用这些方法,使QProgressBar在你的Qt应用程序中按照期望的方式工作。
说到进度条组件就不得不提起定时器类,因为进度条组件往往需要配合定时器一起使用,QTimer是 Qt 中用于创建定时器的类,它允许你在一段时间间隔后执行特定的操作。以下是 QTimer 类的一些常用方法的说明和概述,以表格形式列出:
方法描述QTimer(QObject *parent = nullptr)构造函数,创建一个定时器对象。start(int msec)启动定时器,指定触发时间间隔(以毫秒为单位)。stop()停止定时器,阻止进一步的定时触发。setInterval(int msec)设置定时器的触发时间间隔。setSingleShot(bool singleShot)设置定时器是单次触发还是重复触发。isActive() const检查定时器是否处于活动状态。remainingTime() const返回离下一次定时器触发还有多少时间,如果不活动返回 -1。timeout在定时器超时时发出,可以与槽函数连接以执行相应操作。setTimerType(Qt::TimerType atype)设置定时器的类型,可以是 PreciseTimer 或 CoarseTimer。timerType() const返回定时器的类型。setSingleShot(bool singleShot)设置定时器是单次触发还是重复触发。interval() const返回定时器的触发时间间隔。timeout()返回 timeout 信号的 QMetaObject::Connection 对象。这些方法提供了对 QTimer 进行配置、管理和与之交互的灵活性。你可以根据具体的应用需求使用这些方法,使 QTimer 在你的 Qt 应用程序中按照期望的方式工作。

首先在MainWindow主函数中通过connect设置绑定定时器,并在匿名函数中对数值进行判断,如果到达了进度条最大值则直接使用my_timer->stop()停止计时,否则每次设置进度条加一,代码如下所示;
  1. #include <QTimer>
  2. // 全局定时器变量指针
  3. QTimer *my_timer;
  4. MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
  5. {
  6.     ui->setupUi(this);
  7.     // 声明定时器
  8.      my_timer = new QTimer(this);
  9.      // 绑定一个匿名函数
  10.      connect(my_timer,&QTimer::timeout,[=]{
  11.          static int x = 0;
  12.          // 判断是否到达了进度条的最大值
  13.          if(x != 100)
  14.          {
  15.              x++;
  16.              ui->progressBar_Up->setValue(x);
  17.              ui->progressBar_Down->setValue(int(100-x));
  18.          }
  19.          else
  20.          {
  21.              x=0;
  22.              my_timer->stop();
  23.          }
  24.      });
  25. }
复制代码
当用户点击初始化按钮时,我们首先将两个进度条使用reset()属性进行重置,接着设置progressBar_Down为最大值状态,代码如下所示;
  1. // 初始化进度条
  2. void MainWindow::on_pushButton_clear_clicked()
  3. {
  4.     // 清空进度条
  5.     ui->progressBar_Up->reset();
  6.     ui->progressBar_Down->reset();
  7.     // 设置递减进度条最大值100
  8.     ui->progressBar_Down->setValue(100);
  9. }
复制代码
启动与停止定时器流程一致,首先通过my_timer->isActive()来验证定时器是否启动中,日过不是则my_timer->start(100)启动,如果是则my_timer->stop()停止。
  1. // 启动定时器,并设置周期为100毫秒
  2. void MainWindow::on_pushButton_start_clicked()
  3. {
  4.     if(my_timer->isActive() == false)
  5.     {
  6.         my_timer->start(100);
  7.     }
  8. }
  9. // 停止定时器
  10. void MainWindow::on_pushButton_stop_clicked()
  11. {
  12.     if(my_timer->isActive() == true)
  13.     {
  14.         my_timer->stop();
  15.     }
  16. }
复制代码
运行程序,首先点击初始化按钮设置进度条的状态值,然后读者可点击启动定时器和停止定时器,如下图所示;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表