Bootstrap

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();  
}  

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

           

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;