读文件使用QProgressBar显示进度
Published on 2022-05-12 16:05 in 分类: Qt with 萧海~
分类: Qt

读文件使用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);
    }
    posted @   萧海~  阅读(144)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    历史上的今天:
    2021-05-12 有动画效果的 CheckBox
    2021-05-12 Qt 交换Layout中的QWidget控件位置
    2021-05-12 c++ 使用WinHTTP实现文件下载功能
    2021-05-12 C++ 程序崩溃时生成Dump文件
    2021-05-12 windows下qt程序崩溃后自动将程序拉起来
    2021-05-12 VC 为静态控件添加事件
    2021-05-12 [c++]TRACE 宏的利用
    点击右上角即可分享
    微信分享提示
    电磁波切换