Qt之顯示控件(QProgressBar)

簡述

QProgressBar控件提供水平或垂直進度條。

進度條用於向用戶指示操作的進度,並向他們保證應用程序仍在運行。

使用

效果

源碼

    QProgressBar *progressBar = new QProgressBar;
    progressBar->setOrientation(Qt::Horizontal);
    progressBar->setTextVisible(true);
    progressBar->setFormat("%p%");
    progressBar->setRange(0, 99);

    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 99);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(progressBar, 0, 0, 1, 1);
    gridLayout->addWidget(slider, 1, 0, 1, 1);

    this->setLayout(gridLayout);

    connect(slider, &QSlider::valueChanged, progressBar, &QProgressBar::setValue);

不太好看,可以用QSS修飾一下,關於QSS,以後再說。

常用設置

控件方向、取值範圍以及當前值設置

    progressBar = new QProgressBar;
    progressBar->setOrientation(Qt::Horizontal);//設置進度條爲水平
    progressBar->setRange(0, 99);//取值範圍設置
    progressBar->setValue(20);//當前值設置

文本對齊設置

通過setAlignment,我們可以控制提示文本在進度條上的位置。

progressBar_1->setAlignment(Qt::AlignRight | Qt::AlignVCenter);

文本讀取方向設置

setTextDirection用於設置文本讀取方向,只對垂直進度條有效

常量 描述
QProgressBar::TopToBottom 0 文本順時針旋轉90度(相對於水平)
QProgressBar::BottomToTop 1 文本逆時針旋轉90度(相對於水平)

設置進度條讀取方向

進度條默認從左往右讀,通過setInvertedAppearance可以實現從右往左讀。

效果

源碼

    QProgressBar *progressBar_0 = new QProgressBar;
    progressBar_0->setOrientation(Qt::Horizontal);
    progressBar_0->setTextVisible(true);
    progressBar_0->setRange(0, 99);
    progressBar_0->setValue(0);
    progressBar_0->setAlignment(Qt::AlignRight | Qt::AlignVCenter);

    QProgressBar *progressBar_1 = new QProgressBar;
    progressBar_1->setOrientation(Qt::Horizontal);
    progressBar_1->setTextVisible(true);
    progressBar_1->setRange(0, 99);
    progressBar_1->setValue(0);
    progressBar_1->setAlignment(Qt::AlignRight | Qt::AlignVCenter);//設置文本垂直居中對齊
    progressBar_1->setInvertedAppearance(true);

    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 99);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(progressBar_0, 0, 0, 1, 1);
    gridLayout->addWidget(progressBar_1, 1, 0, 1, 1);
    gridLayout->addWidget(slider, 2, 0, 1, 1);
    this->setLayout(gridLayout);

    connect(slider, &QSlider::valueChanged, progressBar_0, &QProgressBar::setValue);
    connect(slider, &QSlider::valueChanged, progressBar_1, &QProgressBar::setValue);

設置文本可見性

有時候我們不想看到文本,可以通過setTextVisible來關閉文本顯示。

效果

源碼

    progressBar_1->setTextVisible(false);

自定義提示文本

QProgressBar爲我們提供了幾種文本顯示格式:

  • %p-用完成的百分比代替。
  • %v-由當前值替換。
  • %m-由總步數代替。setFormat用於文本顯示格式設置。

我們也可以自定義文本顯示格式,如下所示。

效果

源碼

    progressBar = new QProgressBar;
    progressBar->setOrientation(Qt::Horizontal);
    progressBar->setTextVisible(true);
    progressBar->setRange(0, 99);
    progressBar->setValue(progressBar->minimum());
    double dProgress = (progressBar->value() - progressBar->minimum()) * 100.0
                    / (progressBar->maximum() - progressBar->minimum());
    progressBar->setFormat(QString("當前進度爲:%1%").arg(dProgress));
    progressBar->setAlignment(Qt::AlignRight | Qt::AlignVCenter);

    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 99);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(progressBar, 0, 0, 1, 1);
    gridLayout->addWidget(slider, 1, 0, 1, 1);

    this->setLayout(gridLayout);

    connect(slider, &QSlider::valueChanged, progressBar, &QProgressBar::setValue);

    connect(progressBar, &QProgressBar::valueChanged, this, &Widget::changeProcess);

void Widget::changeProcess()
{
        double dProgress = (progressBar->value() - progressBar->minimum()) * 100.0
                        / (progressBar->maximum() - progressBar->minimum());
        progressBar->setFormat(QString("當前進度爲:%1%").arg(QString::number(dProgress, 'f', 1)));
}

繁忙提示

當最大值與最小值都爲0時,進度條會呈現一種特殊狀態:忙碌狀態。如下所示

引用

[1] Qt助手

[2] https://blog.csdn.net/liang19890820/article/details/52302879

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章