Qt之读文件使用QProgressBar显示进度

/***************.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);
}

原文:https://blog.csdn.net/toby54king/article/details/78640571

posted @ 2022-06-20 17:09  萧海~  阅读(386)  评论(0编辑  收藏  举报