QT简单文件进度条

发布于:2024-12-06 ⋅ 阅读:(88) ⋅ 点赞:(0)

reading.h 

#ifndef READING_H
#define READING_H
#include <QThread>

class Reading : public QThread
{
    Q_OBJECT
public:
    Reading(QObject* parent = nullptr);
protected:
    virtual void run() override;
signals:
    void sigsend();
};

#endif // READING_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QString>
#include <QDebug>
#include <QFileDialog>
#include <QObject>
#include <QFile>
#include <QByteArray>
#include <QDebug>
#include <QThread>
#include "reading.h"
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    int fileRead();
signals:
    void readFile(QString &path);
private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    Reading* t;
    QFile file;
    QString pthname;
    int now_read;
    int rangeMax;

};
#endif // WIDGET_H

reading.cpp

#include "reading.h"

Reading::Reading(QObject* parent)
    :QThread(parent)
{

}

void Reading::run()
{
    while(1){
        emit sigsend();
        this->msleep(100);
    }
}

 widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    now_read = 0;
    ui->setupUi(this);
    ui->horizontalSlider->setValue(0);
    QString qss = "QSlider::sub-page:horizontal{background-color:rgb(0,255,255)}\
                    QSlider::groove:horizontal{background-color:lightGray}\
                   ";
    ui->horizontalSlider->setStyleSheet(qss);
    t = new Reading(this);
    QObject::connect(t,&Reading::sigsend,this ,&Widget::fileRead);
}

Widget::~Widget()
{
    t->terminate();
    delete ui;
}

int Widget::fileRead()
{

   char data[1024];
   now_read += file.read(data , 1024);
   qDebug() <<"read"<<now_read<<" :size: "<<file.size();
   ui->horizontalSlider->setValue(now_read);
   if(now_read == file.size()){
       t->terminate();
       now_read = 0;
       QMessageBox::information(this ,"文件" ,"文件读取完毕");
       ui->horizontalSlider->setValue(0);
       file.close();
   }

}


void Widget::on_pushButton_clicked()
{
    pthname = QFileDialog::getOpenFileName(this,"读取文件","F:/QT_TXT","txt(*.txt)");

}

void Widget::on_pushButton_2_clicked()
{
    file.setFileName(pthname);
    file.open(QFile::ReadOnly);
    if(file.exists()==false){
        qDebug() << "文件不存在";
        return;
    }
    rangeMax =file.size();
    ui->horizontalSlider->setRange(0,rangeMax);

    t->start();


}