• 读文件使用QProgressBar显示进度


    零、小序
    有人问读取文件时怎么使用进度条显示读取百分比,在此写了个小例子希望对初学者有一定的帮助,提供一个思路。

    一、功能描述
    功能描述:读取文件,使用QProgressBar显示读取进度,并把读取的文件显示在QPlainTextEdit上面。

    二、效果演示
    效果演示如下图:

    在这里插入图片描述
    三、代码示例

    /***************.h文件***************/
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    using namespace std;
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
        void readFile(QString fileName);
    public slots:
        void dealOpenFile();
    
    private:
        Ui::Widget *ui;
        QString m_filePath;
        int m_totalLength;
    };
    #endif // WIDGET_H
    
    /***************.cpp文件***************/
    #include "widget.h"
    #include "ui_widget.h"
    #include <QFileDialog>
    #include <QFile>
    #include <QTextStream>
    #include <QDebug>
    #include <QTextCodec>
    #include <string>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(dealOpenFile()));
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    // 函数名称:读文件
    // 作   者:ISMILE_LI
    void Widget::readFile(QString fileName)
    {
        QFile file(m_filePath);
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
            return;
    
        QTextStream out(&file);
        ui->progressBar->setRange(0,m_totalLength);
        QString readLines = "";
        while(!out.atEnd())
        {
            QString line = out.readLine();
    
            //中文乱码转换
            QTextCodec *codec = QTextCodec::codecForName("GBK");
            QTextCodec::setCodecForLocale(codec);
            QByteArray ba = line.toLocal8Bit();
            char* tempChar = ba.data();
            string tempFile = tempChar;
            QString tempLine = QString::fromStdString(tempFile);
    
            qDebug() << tempLine;
            ui->plainTextEdit->appendPlainText(tempLine);
    
            readLines = readLines + line;
    
            int readLineLen = readLines.length();
            ui->progressBar->setValue(readLineLen);
        }
        ui->progressBar->setValue(m_totalLength);// 不加这一句时,进度条达不到100%,没有找到原因
    }
    
    // 函数名称:读文件
    // 作   者:ISMILE_LI
    void Widget::dealOpenFile()
    {
        m_filePath = QFileDialog::getOpenFileName(this,tr("open file"),"../QScrollBarShowPrecent/",
                                                  tr("files(*.cpp *.txt)"));
        QFile file(m_filePath);
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
            return;
    
        QTextStream out(&file);
        QString alltext = out.readAll();
        m_totalLength = alltext.length();
    
        readFile(m_filePath);
    }
    
    
  • 相关阅读:
    SiteMap Editor for Microsoft Dynamics CRM 2011 使用说明
    Microsoft Dynamics CRM 2011 如何导入组织
    SQL server 2008数据库的备份与还原(转)
    css列表
    css栅格
    css-排版
    类的操作
    事件的委派
    正则验证手机号和电子邮件
    div跟随鼠标移动
  • 原文地址:https://www.cnblogs.com/xiaohai123/p/16262881.html
Copyright © 2020-2023  润新知