0
点赞
收藏
分享

微信扫一扫

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);
}

举报

相关推荐

0 条评论