簡述
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