Qt学习11——进度条QProgressBar

版权声明:欢迎转载和收藏。转载请注明出处,谢谢! https://blog.csdn.net/u014266675/article/details/73947626

在处理长时间任务时,有事需要提供进度条显示当前任务进度。Qt中进度条的显示方式有2种,一种是控件方式:QProgressBar;一种是针对慢速过程的对话框方式:QProgressDialog。两种显示方式如下图所示:


QPrgressBar

Qt设计师已经提供了QProgressBar的ui控件,可以直接拖放使用,在属性设置面板里就可以配置主要参数。这里为了方便控制,做了可手动输入计数值和步进值的QLineEdit。详细的代码会在后面给出。

QProgressDialog

QProgressDialog包括一个进度条、一个标签和一个取消按钮。对话框有两种实现方式:模态方式和非模态方式。这里补充说明一下模态方式和非模态方式的模区别:模态方式指在完成当前对话框之前,用户无法对本程序的其他部分进行操作,而非模态指在程序打开非模态对话框的同时还能切换到其他窗口进行操作。类似于数据传输的阻塞模式和非阻塞模式。

由于QProgressDialog并没有设计师中给出ui,需要用代码实现。但Qt已给出QProgressDialog,直接调用继承即可。

下面给出QProgressDialog的实现及QProgressBar的相关配置:

void toolbox::on_startButton_clicked()
{
    int i = 0;
    i_count = ui->countLEdit->text().toInt(nullptr,10);//设置进度条计数值
    i_step = ui->stepLEdit->text().toInt(nullptr,10);//设置计数步进值
    if(ui->comboBox->currentIndex() == 0){
        ui->progressBar->setRange(0,i_count);
        for(i = 0;i <= i_count;i += i_step){
            ui->progressBar->setValue(i);
            ui->cvalueLEdit->setText(QString::number(i,10));
        }
    }
    else if(ui->comboBox->currentIndex() == 1){
        QProgressDialog *progressDlg = new QProgressDialog;
        progressDlg->setWindowModality(Qt::WindowModal);
        progressDlg->setMinimumDuration(0);//dialog出现需等待的时间
        progressDlg->setWindowTitle("Please Wait...");
        progressDlg->setLabelText("Copying...");
        progressDlg->setCancelButtonText("Cancel");
        progressDlg->setRange(0,i_count);
        for(i = 0;i <= i_count;i += i_step){
            if(progressDlg->wasCanceled())
                return;
            progressDlg->setValue(i);
            ui->cvalueLEdit->setText(QString::number(i,10));
        }
    }
}
QProgressDialog继承自QDialog,用法与QDialog一致,这里用setWindowTitle、setLabelText、setCancelButtonText对Dialog的标题、标签、按钮文本进行设置,同时,QProgressBar和QProgressDialog均可通过setRange方法设置计数范围,然后用循环累加实现进度变化。

示例下载:点此下载

Qt版本:Qt 5.8.0(MSVC 2015,32bit)+Qt Creator 4.2.1

猜你喜欢

转载自blog.csdn.net/u014266675/article/details/73947626
今日推荐