读文件使用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);
}