通过QT实现进度条随着读取文件增加

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

mythread循环给主线程发送信号实现主线程循环的功能

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QByteArray>
#include "mythread.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void slider_move();

private:
    QFile* fp;
    mythread* t;
    int i=0;
    Ui::Widget *ui;
};
#endif // WIDGET_H

mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

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


};

#endif // MYTHREAD_H

widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    fp = new QFile(this);
    t = new mythread(this);
    QObject::connect(t,&mythread::sndsig,this,&Widget::slider_move);

QString qss = "QSlider::sub-page{background-color:rgba(0, 255, 0, 100)} QSlider::groove{background-color:lightGray}";
    ui->hsl->setStyleSheet(qss);
}

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


void Widget::on_pushButton_clicked()
{
    QString file = QFileDialog::getOpenFileName(this,"閫夋嫨鏂囦欢");
    fp->setFileName(file);
    fp->open(QIODevice::ReadOnly);
    t->start();
}

void Widget::slider_move()
{
    int len = fp->size();
    QByteArray text =  fp->read(1024);
    QString txt = QString::fromLocal8Bit(text);
    ui->lineEdit->setText(txt);
    ui->hsl->setRange(0,len);
    ui->hsl->setValue(i+=1024);
    if(fp->atEnd() == true){
        fp->close();
        t->terminate();
    }
}

mythred.cpp

#include "mythread.h"

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

}

void mythread::run()
{
    while (1) {
        emit sndsig();
        QThread::msleep(100);
    }

}


网站公告

今日签到

点亮在社区的每一天
去签到