Qt 基础之进度条 - QProgressDialog和QProgressBar
引言
进度条
的作用是用于显示任务或操作的进度,以便用户了解当前任务的完成情况。它可以提供实时、可视的反馈,让用户知道任务的进展情况,以及剩余的时间或工作量。进度条可以用于各种应用场景,比如文件下载、软件安装、视频播放、上传文件、数据处理等,帮助用户更好地管理和掌控任务的执行。
QProgressDialog
和QProgressBar
用来是Qt框架中用于显示进度条的两个类,它们都是基于QWidget的派生类,用于在应用程序中显示任务的进度。
一、QProgressDialog例程
QProgressDialog
是一个具有取消按钮的对话框。
1.1 效果展示
点击按钮弹出进度条对话框,点击不读了
关闭对话框。
1.2 源码
void MainWindow::on_pushButton_clicked()
{
//创建一个进度条对话框 .....
QProgressDialog *progressDialog = new QProgressDialog(this);
progressDialog->setMinimumWidth(300); // 设置最小宽度
progressDialog->setWindowModality(Qt::NonModal); // 非模态,其它窗口正常交互 Qt::WindowModal 模态
progressDialog->setMinimumDuration(0); // 等待0秒后显示
progressDialog->setWindowTitle(tr("进度条框")); // 标题名
progressDialog->setLabelText(tr("正在读取")); // 标签的
progressDialog->setCancelButtonText(tr("不读了")); // 取消按钮
progressDialog->setRange(0, 10);
for(int i=1; i <= 10; i++)
{
if(progressDialog->wasCanceled())
return;
progressDialog->setValue(i);
// 延时
QEventLoop eventloop;
QTimer::singleShot(1000, &eventloop, SLOT(quit()));
eventloop.exec();
}
}
二、QProgressBar例程
2.1 效果展示
在窗口中添加了一个progressBar
,直接设置其Range
和Value
即可。
2.2 源码
void MainWindow::on_pushButton_clicked()
{
// 创建一个进度条对话框 .....
QProgressDialog *progressDialog = new QProgressDialog(this);
progressDialog->setMinimumWidth(300); // 设置最小宽度
progressDialog->setWindowModality(Qt::NonModal); // 非模态,其它窗口正常交互 Qt::WindowModal 模态
progressDialog->setMinimumDuration(0); // 等待0秒后显示
progressDialog->setWindowTitle(tr("进度条框")); // 标题名
progressDialog->setLabelText(tr("正在读取")); // 标签的
progressDialog->setCancelButtonText(tr("不读了")); // 取消按钮
progressDialog->setRange(0, 10);
// progressBar
ui->progressBar->setRange(0, 10);
// 显示进度
for(int i=1; i <= 10; i++)
{
if(progressDialog->wasCanceled())
return;
progressDialog->setValue(i);
ui->progressBar->setValue(i);
// 延时
QEventLoop eventloop;
QTimer::singleShot(1000, &eventloop, SLOT(quit()));
eventloop.exec();
}
}
三、QProgressBar进阶
QProgressDialog 约等于 对话框 + QProgressBar
+ 按钮,以QProgressBar
为切入点,深入了解Qt进度条.
-
- 先设置最大值
maximum
和最小值minimum
,然后给它提供当前值v
时显示已完成的百分比。百分比的计算方法 = ( v − m i n i m u m ) / ( m a x i m u m − m i n i m u m ) (v - minimum) / (maximum-minimum) (v−minimum)/(maximum−minimum)。
- 先设置最大值
void MainWindow::on_pushButton_clicked()
{
i = 0;
// 实现定时事件
connect(timer, &QTimer::timeout, [this](){
i++;
ui->progressBar->setValue(i);
if(i == ui->progressBar->maximum()){
timer->stop();
}
});
// progressBar
ui->progressBar->setRange(0, 10);
// 开启定时器
timer->start(1000);
}
-
- 获取其常用的属性
- 获取其常用的属性
// progressBar
ui->progressBar->setRange(0, 10);
qDebug()<<"当前值:"<<ui->progressBar->value();
qDebug()<<"最大值:"<<ui->progressBar->maximum();
qDebug()<<"最小值:"<<ui->progressBar->minimum();
qDebug()<<"方向:"<<ui->progressBar->orientation();
qDebug()<<"格式:"<<ui->progressBar->format();
-
- 当其最大值 = 最小值 = 0,进度条会没有显示但一直在动
- 当其最大值 = 最小值 = 0,进度条会没有显示但一直在动
void MainWindow::on_pushButton_clicked()
{
i = 0;
// 实现定时事件
connect(timer, &QTimer::timeout, [this](){
i++;
ui->progressBar->setValue(i);
if(i == ui->progressBar->maximum()){
timer->stop();
}
});
// progressBar
ui->progressBar->setRange(0, 0);
// 开启定时器
timer->start(1000);
}
-
- 格式format:%p - 百分比. %v - 当前值. %m - 总值.
ui->progressBar->setFormat("%p"); // %v %m
- 格式format:%p - 百分比. %v - 当前值. %m - 总值.
-
- 自定义格式:
ui->progressBar->setFormat("%p% %v/%m");
- 自定义格式: