当前位置: 首页 > article >正文

qt QProgressBar详解

1、概述

QProgressBar是Qt框架中的一个控件,专门用于显示任务的进度。它提供了一个可视化的进度条,让用户能够直观地了解任务的完成程度。QProgressBar支持水平和垂直两种显示方向,并且可以通过设置最小值和最大值来指定进度条的范围。此外,QProgressBar还允许自定义样式,以满足不同的用户界面需求。

2、重要方法

QProgressBar类提供了多种方法来配置和控制进度条的行为:

  • 设置范围

    • setRange(int minimum, int maximum):设置进度条的最小值和最大值。
    • setMinimum(int minimum):单独设置进度条的最小值。
    • setMaximum(int maximum):单独设置进度条的最大值。
  • 设置当前值

    • setValue(int value):设置进度条的当前值。
    • value():获取进度条的当前值。
  • 重置进度条

    • reset():将进度条的当前值重置为最小值(通常用于重新开始任务)。
  • 设置方向

    • setOrientation(Qt::Orientation orientation):设置进度条的方向为水平或垂直。
  • 设置外观

    • setInvertedAppearance(bool inverted):如果设置为true,则进度条的方向将与其默认方向相反。
    • setTextVisible(bool visible):设置是否显示进度条上的文本(通常是当前值的百分比)。
    • setFormat(const QString &format):自定义进度条上显示的文本格式。可以使用%p表示百分比,%v表示当前值,%m表示总值。
  • 其他方法

    • setAlignment(Qt::Alignment alignment):设置进度条上文本的对齐方式。
3、重要信号

QProgressBar类提供了一个重要的信号来通知开发者进度条的变化:

  • valueChanged(int value):当进度条的当前值发生变化时发出。这个信号携带新的整数值作为参数,表示进度条的当前值。
#include <QApplication>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QProgressBar>  
#include <QTimer>  
#include <QLabel>  
  
class MyWidget : public QWidget {  
    Q_OBJECT  
  
public:  
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {  
        QVBoxLayout *layout = new QVBoxLayout(this);  
  
        QProgressBar *progressBar = new QProgressBar(this);  
        progressBar->setRange(0, 100);  
        progressBar->setValue(0);  
        progressBar->setAlignment(Qt::AlignCenter);  
  
        QLabel *label = new QLabel("进度: 0%", this);  
  
        QTimer *timer = new QTimer(this);  
        connect(timer, &QTimer::timeout, this, &MyWidget::updateProgressBar);  
  
        layout->addWidget(progressBar);  
        layout->addWidget(label);  
  
        setLayout(layout);  
  
        // 启动定时器,每隔100毫秒更新一次进度条  
        timer->start(100);  
    }  
  
private slots:  
    void updateProgressBar() {  
        QProgressBar *progressBar = findChild<QProgressBar*>();  
        QLabel *label = findChild<QLabel*>();  
  
        if (progressBar && label) {  
            int currentValue = progressBar->value();  
            if (currentValue < 100) {  
                progressBar->setValue(currentValue + 1);  
                label->setText(QString("进度: %1%").arg(currentValue + 1));  
            } else {  
                // 停止定时器  
                QTimer *timer = findChild<QTimer*>();  
                if (timer) {  
                    timer->stop();  
                }  
                label->setText("任务完成!");  
            }  
        }  
    }  
};  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    MyWidget widget;  
    widget.show();  
  
    return app.exec();  
}  

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/a/374395.html

相关文章:

  • 论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm
  • CS 144 check7: putting it all together
  • GJB289A总线典型网络理论分析
  • 【Python高级353】python实现多线程版本的TCP服务器
  • adb无法连接到安卓设备【解决方案】报错:adb server version (40) doesn‘t match this client (41);
  • 【C++】设计模式
  • 10.31学习
  • 【golang/navmesh】使用recast navigation进行寻路
  • Node.js UDP通信 dgram 组播
  • canvas自定义文本排列方法 + 自定义花字应用案例
  • 使用Python和OCR技术实现自动化办公:图片转文字
  • Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)
  • 安装Docker到指定目录
  • 学习stm32
  • 免费送源码:Java+ssm++MVC+HTML+CSS+MySQL springboot 社区医院信息管理系统的设计与实现 计算机毕业设计原创定制
  • 校园社团信息管理平台:Spring Boot技术实战指南
  • 自修室预约系统|基于java和小程序的自修室预约系统设计与实现(源码+数据库+文档)
  • CentOS 9 Stream 上安装 IntelliJ IDEA
  • 什么是线程局部变量(ThreadLocal)?
  • 金融领域中的敏感性分析和期权价值计算相关的操作
  • 动态规划 01背包(算法)
  • OV代码签名证书
  • Leetcode 移除元素
  • 流畅!HTMLCSS打造网格方块加载动画
  • 使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序
  • 如何基于Apache SeaTunnel 读取Oracle的数据