QProgressDialog进度条类

QProgressDialog

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()<<"点击了取消按钮";

    });

第一个
在这里插入图片描述

第二个
在这里插入图片描述

第三个
在这里插入图片描述

第四个
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过自定义QProgressDialog的实现来实现这个圆形进度条。 以下是一个简单的示例代码: ```cpp #include <QApplication> #include <QProgressDialog> #include <QTimer> int main(int argc, char *argv[]) { QApplication app(argc, argv); QProgressDialog progressDialog; progressDialog.setLabelText("Loading..."); progressDialog.setRange(0, 0); // 设置进度条为不确定模式 progressDialog.setCancelButton(nullptr); // 禁用取消按钮 // 创建一个圆形进度条 widget QWidget* circleWidget = new QWidget(&progressDialog); circleWidget->setFixedSize(100, 100); // 设置固定大小 circleWidget->setStyleSheet("background-color: #fff; border-radius: 50%;"); // 将圆形进度条 widget 添加到 QDialogButtonBox 中 QDialogButtonBox* buttonBox = progressDialog.findChild<QDialogButtonBox*>(); if (buttonBox) { buttonBox->addWidget(circleWidget); } // 模拟加载过程 QTimer::singleShot(5000, &progressDialog, &QProgressDialog::accept); progressDialog.exec(); return 0; } ``` 在这个示例代码中,我们创建了一个QProgressDialog,并将其进度条设置为不确定模式。然后,我们创建了一个新的QWidget作为圆形进度条,设置其大小和样式,并将其添加到QDialogButtonBox中。最后,我们使用QTimer模拟加载过程,并在加载完成后调用QProgressDialog的accept()函数以结束对话框。 您可以修改圆形进度条的大小、样式和动画,以适应您的需求。希望这可以帮助您实现您的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值