QProcess

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <QApplication>
#include <QWidget>
#include <QProgressBar>
#include <QSlider>
#include <QVBoxLayout>
#include <QLabel>

void setupProgressBarDemo(QWidget *parent) {
QVBoxLayout *layout = new QVBoxLayout(parent);

// --- 1. 标准进度条 ---
QLabel *label1 = new QLabel("当前任务进度:", parent);
QProgressBar *bar = new QProgressBar(parent);
bar->setRange(0, 100); // 设置起止范围
bar->setValue(0); // 初始值

// 自定义文字显示格式
// %p - 进度百分比, %v - 当前数值, %m - 最大值
bar->setFormat("已完成 %p%");
bar->setAlignment(Qt::AlignCenter); // 文字居中

// --- 2. 滑动条联动控制 (演示进度变化) ---
// 现实中可能是网络下载,这里我们用 Slider 模拟
QSlider *slider = new QSlider(Qt::Horizontal, parent);
slider->setRange(0, 100);

QObject::connect(slider, &QSlider::valueChanged, [bar](int value) {
bar->setValue(value); // 滑动条动,进度条跟着变
});

// --- 3. 忙碌模式 (Indeterminate Mode) ---
// 当你不知道进度要跑多久时(比如扫描文件),可以设置范围为 (0, 0)
QLabel *label2 = new QLabel("后台扫描中(忙碌模式):", parent);
QProgressBar *busyBar = new QProgressBar(parent);
busyBar->setRange(0, 0); // 范围设为 0 到 0,进度条会左右反复滑动

layout->addWidget(label1);
layout->addWidget(bar);
layout->addWidget(new QLabel("拖动下方滑块模拟下载进度:"));
layout->addWidget(slider);
layout->addSpacing(20); // 加个间距
layout->addWidget(label2);
layout->addWidget(busyBar);
layout->addStretch();
}

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
w.resize(400, 300);
setupProgressBarDemo(&w);
w.show();
return a.exec();
}