当前位置:   article > 正文

QT-纯代码控件-QProgressBar(进度条)

QT-纯代码控件-QProgressBar(进度条)

用以实现一个读取文件进度条的功能

1.新建一个无ui界面的工程,其基类为dialog对话框类

在这里插入图片描述

2.代码实现

dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void startProgress();           //定义一个槽函数


private:
    QLabel * fileNum;               //控件声明
    QProgressBar * progressBar;     //控件声明
    QPushButton  * startBtn;        //控件声明
};


#endif // DIALOG_H

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
dialog.cpp
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    this->setWindowTitle(tr("进度条"));
    fileNum = new QLabel(this);
    fileNum->setText(tr("复制文件数目:0"));
    fileNum->setGeometry(20,10,200,18);
    progressBar = new QProgressBar(this);
    progressBar->setGeometry(20,35,200,10);
    startBtn = new QPushButton(this);
    startBtn->setText(tr("开始"));
    startBtn->setGeometry(20,55,80,30);

    //连接信号与槽
    connect(startBtn,SIGNAL(clicked()),this,SLOT(startProgress()));
}

Dialog::~Dialog()
{

}

//槽函数实现
void Dialog::startProgress()
{
    progressBar->setRange(0,100000);      //设置进度条的范围
    for(int i = 1; i <= 100000; i++)
    {
        progressBar->setValue(i);
        QString str = QString("%1").arg(i);
        str = "复制文件数目: "  +str;
        fileNum->setText(str);

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3.效果展示

在这里插入图片描述
在这里插入图片描述

4.不足与需改进之处

1.进程过快。效果不宜呈现,可以将进度条的值调大一点
2.后面可以引入QTimer定时器功能,以实现文件复制

5.改进之后

progressbar.h
#ifndef PROGRESSBAR_H
#define PROGRESSBAR_H

#include <QMainWindow>
#include <QProgressBar>

class ProgressBar : public QMainWindow
{
    Q_OBJECT

public:
    ProgressBar(QWidget *parent = 0);
    ~ProgressBar();
};

//新建类
class QString;
class Progressbar : public QProgressBar
{
    Q_OBJECT
public:
    Progressbar(QWidget *parent = 0):QProgressBar(parent){}
    QString strText;

public slots:
    void stepOne();
};

#endif // PROGRESSBAR_H

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
progressbar.cpp
#include "progressbar.h"
#include <QString>

ProgressBar::ProgressBar(QWidget *parent)
    : QMainWindow(parent)
{
}

ProgressBar::~ProgressBar()
{

}

void Progressbar::stepOne()
{
    if(this->value()+1 <= this->maximum())
    {
        this->setValue(this->value() + 1);

        strText = "进度条 : " + this->text();
        this->setWindowTitle(strText);
    }
    else
    {
        this->setValue(this->minimum());
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
main.cpp
#include "progressbar.h"
#include <QApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ProgressBar w;
    w.show();

    //进度条设置
    Progressbar * progress = new Progressbar;
    progress->setWindowTitle("进度条");
    progress->resize(400,40);
    progress->setMaximum(100);
    progress->setMinimum(0);
    progress->setValue(0);

    //设置一个定时器
    QTimer *timer = new QTimer;
    timer->start(500);
    QObject::connect(timer, SIGNAL(timeout()), progress, SLOT(stepOne()));
    progress->show();

    return a.exec();
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

6.效果展示

在这里插入图片描述

改进版本参考链接:http://blog.chinaunix.net/uid-27225886-id-3352398.html
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/264340
推荐阅读
相关标签
  

闽ICP备14008679号