QProgressDialog
- 常用API
- 简单的使用
QProgressDialog类是QDialog的子类, 通过这个类我们可以得到一个带进度条的对话框窗口
常用API
// 构造函数
/*
参数:
- labelText: 对话框中显示的提示信息
- cancelButtonText: 取消按钮上显示的文本信息
- minimum: 进度条最小值
- maximum: 进度条最大值
- parent: 当前窗口的父对象
- f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
*/
QProgressDialog::QProgressDialog(
QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(
const QString &labelText, const QString &cancelButtonText,
int minimum, int maximum, QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());
// 设置取消按钮显示的文本信息
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);
// 公共成员函数和槽函数
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);
// 得到进度条最小值
int QProgressDialog::minimum() const;
// 设置进度条最小值
void QProgressDialog::setMinimum(int minimum);
// 得到进度条最大值
int QProgressDialog::maximum() const;
// 设置进度条最大值
void QProgressDialog::setMaximum(int maximum);
// 设置进度条范围(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);
// 得到进度条当前的值
int QProgressDialog::value() const;
// 设置进度条当前的值
void QProgressDialog::setValue(int progress);
bool QProgressDialog::autoReset() const;
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。
void QProgressDialog::setAutoReset(bool reset);
bool QProgressDialog::autoClose() const;
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。
void QProgressDialog::setAutoClose(bool close);
// 判断用户是否按下了取消键, 按下了返回true, 否则返回false
bool wasCanceled() const;
// 重置进度条
// 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
[slot] void QProgressDialog::cancel();
// 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
[slot] void QProgressDialog::reset();
// 信号
// 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
[signal] void QProgressDialog::canceled();
// 设置窗口的显示状态(模态, 非模态)
/*
参数:
Qt::NonModal -> 非模态
Qt::WindowModal -> 模态, 阻塞父窗口
Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
*/
void QWidget::setWindowModality(Qt::WindowModality windowModality);
简单的使用
void MainWindow::on_pushButton1_clicked()
{
// 1 构造进度条对象
QProgressDialog* q1 = new QProgressDialog(
this,
Qt::WindowFlags());
// 2 初始化并显示进度条
q1->setCancelButtonText("取消下载");
q1->setLabelText("正在下载");
q1->setMinimum(0);
q1->setMaximum(50);
q1->setValue(10);
q1->setAutoReset(true);
q1->setWindowTitle("请稍等,正在下载");
q1->show();
// 3 更新进度条
static int val = 0;
QTimer* t1 = new QTimer(this);
t1->start(20);
connect(t1,&QTimer::timeout,this,[=]{
q1->setValue(val);
val++;
//终止条件
if(val>q1->maximum()){
t1->stop();
val = 0;
}
});
}
void MainWindow::on_pushButton2_clicked()
{
// 1 构造进度条对象
QProgressDialog* q1 = new QProgressDialog(
"进度条对话框", "取消当前进度条",
0, 100, this,
Qt::WindowFlags());
// 2 初始化并显示进度条
q1->setAutoClose(true);
q1->setWindowTitle("进度条窗口的标题");
q1->setAutoClose(false); //当value() = maximum()时,进程对话框是否调用reset()并且隐藏
q1->show();
// 3 更新进度条
static int val = 0;
QTimer* t1 = new QTimer(this);
t1->start(20);
connect(t1,&QTimer::timeout,this,[=]{
q1->setValue(val);
val++;
//终止条件
if(val>q1->maximum()){
t1->stop();
val = 0;
}
});
}
void MainWindow::on_pushButton3_clicked()
{
// 1 构造进度条对象
QProgressDialog* q1 = new QProgressDialog(
"进度条对话框", "取消当前进度条",
0, 100, this,
Qt::WindowFlags());
// 2 初始化并显示进度条
q1->setAutoClose(true);
q1->setWindowTitle("进度条窗口的标题");
q1->setAutoClose(false); //当value() = maximum()时,进程对话框是否调用reset()并且隐藏
q1->show();
// 3 更新进度条
static int val = 0;
QTimer* t1 = new QTimer(this);
t1->start(20);
connect(t1,&QTimer::timeout,this,[=]{
q1->setValue(val);
val++;
//终止条件
if(val>q1->maximum()){
t1->stop();
val = 0;
}
});
connect(q1,&QProgressDialog::canceled,this,[=]{
t1->stop();
val = 0;
});
}
void MainWindow::on_pushButton4_clicked()
{
// 1 构造进度条对象
QProgressDialog* q1 = new QProgressDialog(
"进度条对话框", "取消当前进度条",
0, 100, this,
Qt::WindowFlags());
// 2 初始化并显示进度条
q1->setAutoClose(true);
q1->setWindowTitle("进度条窗口的标题");
q1->setAutoClose(false); //当value() = maximum()时,进程对话框是否调用reset()并且隐藏
/*
参数:
Qt::NonModal -> 非模态
Qt::WindowModal -> 模态, 阻塞父窗口
Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
设置窗口的显示状态(模态, 非模态)
*/
q1->setWindowModality(Qt::WindowModal);
q1->show();
// 3 更新进度条
static int val = 0;
QTimer* t1 = new QTimer(this);
t1->start(20);
connect(t1,&QTimer::timeout,this,[=]{
q1->setValue(val);
val++;
//终止条件
if(val>q1->maximum()){
t1->stop();
val = 0;
}
});
connect(q1,&QProgressDialog::canceled,this,[=]{
t1->stop();
val = 0;
qDebug()<<"点击了取消按钮";
});
第一个
第二个
第三个
第四个