首页 > 编程语言 >C++ Qt开发:ProgressBar进度条组件

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

时间:2023-12-15 10:14:25浏览次数:36  
标签:定时器 Qt 进度条 timer C++ 组件 my

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) 设置定时器的类型,可以是 PreciseTimerCoarseTimer
timerType() const 返回定时器的类型。
setSingleShot(bool singleShot) 设置定时器是单次触发还是重复触发。
interval() const 返回定时器的触发时间间隔。
timeout() 返回 timeout 信号的 QMetaObject::Connection 对象。

这些方法提供了对 QTimer 进行配置、管理和与之交互的灵活性。你可以根据具体的应用需求使用这些方法,使 QTimer 在你的 Qt 应用程序中按照期望的方式工作。

首先在MainWindow主函数中通过connect设置绑定定时器,并在匿名函数中对数值进行判断,如果到达了进度条最大值则直接使用my_timer->stop()停止计时,否则每次设置进度条加一,代码如下所示;

#include <QTimer>

// 全局定时器变量指针
QTimer *my_timer;

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 声明定时器
     my_timer = new QTimer(this);

     // 绑定一个匿名函数
     connect(my_timer,&QTimer::timeout,[=]{
         static int x = 0;

         // 判断是否到达了进度条的最大值
         if(x != 100)
         {
             x++;
             ui->progressBar_Up->setValue(x);
             ui->progressBar_Down->setValue(int(100-x));
         }
         else
         {
             x=0;
             my_timer->stop();
         }
     });
}

当用户点击初始化按钮时,我们首先将两个进度条使用reset()属性进行重置,接着设置progressBar_Down为最大值状态,代码如下所示;

// 初始化进度条
void MainWindow::on_pushButton_clear_clicked()
{
    // 清空进度条
    ui->progressBar_Up->reset();
    ui->progressBar_Down->reset();

    // 设置递减进度条最大值100
    ui->progressBar_Down->setValue(100);
}

启动与停止定时器流程一致,首先通过my_timer->isActive()来验证定时器是否启动中,日过不是则my_timer->start(100)启动,如果是则my_timer->stop()停止。

// 启动定时器,并设置周期为100毫秒
void MainWindow::on_pushButton_start_clicked()
{
    if(my_timer->isActive() == false)
    {
        my_timer->start(100);
    }
}

// 停止定时器
void MainWindow::on_pushButton_stop_clicked()
{
    if(my_timer->isActive() == true)
    {
        my_timer->stop();
    }
}

运行程序,首先点击初始化按钮设置进度条的状态值,然后读者可点击启动定时器和停止定时器,如下图所示;

标签:定时器,Qt,进度条,timer,C++,组件,my
From: https://www.cnblogs.com/LyShark/p/17898905.html

相关文章

  • MacOS - Qt工程转xcode工程
    序言:程序使用Qt开发,程序主要功能是调用摄像头。需要打包成pkg给到用户安装,打包用到的是xcode。一、Qt工程转xcode工程//打开终端,cd到项目根目录(CamScan.pro目录),使用qmake生成xcode工程文件(CamScan.xcodeproj)cd/Users/yangHu/Desktop/CamScan/CamScan/Users/App/Q......
  • C++(cmake-build-debug 和 cmake-build-release)
    cmake-build-debug和cmake-build-release是两个默认的构建目录名称,通常在使用CMake构建项目时生成。以下是它们的主要作用和区别:1.cmake-build-debug:这是一个用于调试构建的默认构建目录名称。在这个目录下,CMake会生成包含调试信息的可执行文件,以方便在调试器中进行调试......
  • 算法战斗第三天C++2
    A.DominopilingYouaregivenarectangularboardofM × Nsquares.Alsoyouaregivenanunlimitednumberofstandarddominopiecesof2 × 1squares.Youareallowedtorotatethepieces.Youareaskedtoplaceasmanydominoesaspossibleonthe......
  • 算法战斗第三天C++1
    A.Bit++TheclassicprogramminglanguageofBitlandisBit++.Thislanguageissopeculiarandcomplicated.Thelanguageisthatpeculiarasithasexactlyonevariable,calledx.Also,therearetwooperations:Operation++increasesthevalueofv......
  • 浅谈Qt信号槽的实现原理
    背景:1、使用信号槽,需要先“Q_OBJECT”2、通过connect函数进行信号槽绑定3、通过emitsignal()发送信号原理:1、Q_OBJECT是一个预编译命令,可生成很多函数、变量。生成存储Connection对象的列表。2、connect函数需要四个信息:信号发送者、信号、接受者、槽函数connect函数生成......
  • C++(resize())
    在C++中,resize()是一种用于调整容器大小的成员函数,它通常用于std::vector、std::string等标准库容器。这个函数允许你改变容器中元素的数量,可以增加或减少容器的大小。对于std::vector:#include<vector>#include<iostream>intmain(){std::vector<int>myVector......
  • C++(clear())
    在C++中,clear()是用于清除流的状态和控制信息的成员函数,通常用于输入流(例如std::cin)和输出流(例如std::cout)。对于输入流:#include<iostream>intmain(){intnum;std::cin>>num;//检查输入流的状态if(std::cin.fail()){std::cerr<<......
  • C++(push_back)
    在C++中,push_back是用于在容器的末尾添加一个元素的成员函数。这个函数通常用于向动态数组(比如std::vector)或类似的容器中添加新的元素。语法:voidpush_back(constT&value);value:要添加到容器末尾的元素。示例:#include<iostream>#include<vector>intmain(){......
  • C++和QML混合编程
    一、QML访问C++方法Qt元对象系统中注册C++类,在QML中实例化、访问。C++中实例化并设置为QML上下文属性,在QML中直接使用。      比较:方法1可以使C++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大。二、QML访......
  • Qt之modbus_slave例程的底层串口数据分析
    一.参考网址1. qCDebug输出到日志文件2. HowtoredirectqDebug,qWarning,qCriticaletcoutput?二.问题1. 如何查看slave底层收到的主机发送的消息和回复的消息?解决办法:在main.cpp代码中取消注释 注:QLoggingCategory::setFilterRules函数不能重复使用,其只能最后......