QT 进度条QProgressBar和QProgressDialog

QT 进度条QProgressBar和QProgressDialog

QProgressBar介绍

在长时间任务中需要提供进度条用于显示进度。进度条对话框有两种使用方法,模态方式和非模态方式。

Qt提供了两种显示进度条的方式:一种是QProgressBar,提供一种横向或纵向显示进度的控件表示方式,来描述任务的完成情况;

另一种是QProgressDialog,提供一种针对慢速过程的进度对话框表示方式,用于描述任务的完成情况。标准的进度条对话框包括一个进度显示条、一个取消按钮以及一个标签。

代码展示

头文件

class ProgressDlg : public QDialog
{
    
    
    Q_OBJECT

public:
    ProgressDlg(QWidget *parent = nullptr);
    ~ProgressDlg();
private slots:
    void startProgress();
private:
    QLabel *fileNumLabel;
    QLineEdit *fileNumLineEdit;
    QLabel *progressType;
    QComboBox *typeComboBox;
    QProgressBar *progressBar;
    QPushButton *startBtn;
    QGridLayout *mainLayout;
};

Cpp文件

ProgressDlg::ProgressDlg(QWidget *parent)
    : QDialog(parent)
{
    
    
    setWindowTitle(tr("ProgressExample"));
    fileNumLabel = new QLabel();
    fileNumLabel->setText(tr("文件数目:"));
    fileNumLineEdit = new QLineEdit;
    fileNumLineEdit->setText(tr("1000000"));
    progressType = new QLabel;
    progressType->setText(tr("显示类型"));
    typeComboBox = new QComboBox;
    typeComboBox->addItem(tr("QProgressBar"));
    typeComboBox->addItem(tr("QProgressDialog"));
    progressBar = new QProgressBar;
    startBtn = new QPushButton;
    startBtn->setText(tr("开始"));

    mainLayout = new QGridLayout(this);
    mainLayout->addWidget(fileNumLabel,0,0);
    mainLayout->addWidget(fileNumLineEdit,0,1);
    mainLayout->addWidget(progressType,1,0);
    mainLayout->addWidget(typeComboBox,1,1);
    mainLayout->addWidget(progressBar,2,0,1,2);
    mainLayout->addWidget(startBtn,3,1);
    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);

    connect(startBtn,SIGNAL(clicked()),this,SLOT(startProgress()));
}

ProgressDlg::~ProgressDlg()
{
    
    
}

void ProgressDlg::startProgress()
{
    
    
    bool ok = false;
    int num = fileNumLineEdit->text().toInt(&ok);
    if(ok){
    
    
        int index = typeComboBox->currentIndex();
        if(index == 0){
    
    // 选择了 QProgressBar
            startBtn->setDisabled(true);
            // QProgressBar 有几个重要属性
            // 1、minimum\maximum: 决定进度条指示的最小值和最大值
            // 2、format: 决定进度条显示文字的格式。`%p%` 显示完成百分比,默认方式; `%v`显示当前进度值; `%m`显示总的步进值
            // 3、invertedAppearance : 反向显示
            progressBar->setRange(0,num);
            progressBar->setFormat("%p%"); // %p%[0%-100%]  %v[0-num]  %m
            progressBar->setInvertedAppearance(false);
            for (int i = 1; i<num+1; i++) {
    
    
                progressBar->setValue(i);
            }
            startBtn->setDisabled(false);
        } else if(index == 1){
    
    
            // QProgressDialog几个重要属性
            // 1、minimum\maximum: 决定进度条指示的最小值和最大值
            // 2、minimumDuration: 进度条显示等待时间,系统会根据工作量预估,若大于则显示,若小于不显示
            QProgressDialog *progressDlg = new QProgressDialog;
            progressDlg->setWindowModality(Qt::WindowModal); // 设置模态显示
            progressDlg->setMinimumDuration(1); // 默认4秒
            progressDlg->setRange(0,num);
            progressDlg->setWindowTitle(tr("Please Waiting..."));
            progressDlg->setLabelText(tr("Coping...."));
            progressDlg->setCancelButtonText(tr("Cancel"));
            for (int i = 1; i<num+1; i++) {
    
    
                progressDlg->setValue(i);
                if(progressDlg->wasCanceled()){
    
    
                    return;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/130439497