QT文件读取

[复制链接]
发表于 2025-12-10 01:52:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1:使用QT的文件IO QFile 和 QFileDialog文件对话框,读取一个选中的文件,然后使用QSlider体现读取的进度,QSlider必要改成进度条的样式

mythread.h
  1. #ifndef MYTHREAD_H
  2. #define MYTHREAD_H
  3. #include <QThread>
  4. #include <QObject>
  5. class mythread : public QThread
  6. {
  7.     Q_OBJECT
  8. public:
  9.     mythread(QObject *parent = Q_NULLPTR);
  10. protected:
  11.     virtual void run() override;
  12. signals:
  13.     void sndSig();
  14. };
  15. #endif // MYTHREAD_H
复制代码
mthread.cpp
  1. #include "mythread.h"
  2. mythread::mythread(QObject *parent)
  3.     :QThread(parent)
  4. {
  5. }
  6. void mythread::run()
  7. {
  8.     while (1) {
  9.         emit sndSig();
  10.         this->msleep(50);
  11.     }
  12. }
复制代码
widget.h
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QComboBox>
  5. #include <QSlider>
  6. #include <QString>
  7. #include <QTimer>
  8. #include "mythread.h"
  9. #include <QFileDialog>
  10. #include <QDebug>
  11. #include <QProgressBar>
  12. #include <QMessageBox>
  13. QT_BEGIN_NAMESPACE
  14. namespace Ui { class Widget; }
  15. QT_END_NAMESPACE
  16. class Widget : public QWidget
  17. {
  18.     Q_OBJECT
  19. public:
  20.     Widget(QWidget *parent = nullptr);
  21.     ~Widget();
  22. public slots:
  23.     void readslot();
  24.     void startslot();
  25. private slots:
  26.     void on_pushButton_clicked();
  27. signals:
  28.     void trigger();
  29. private:
  30.     Ui::Widget *ui;
  31.     QTimer* timer;
  32.     int i = 0;
  33.     mythread* t;
  34.     QFile* fd;
  35.     QByteArray btarr;
  36.     qint64 maxsize=1024;
  37.     qint64 size=0;
  38.     void readFileInChunks(const QString &content);
  39. };
  40. #endif // WIDGET_H
复制代码
widget.cpp
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     ui->slider->setRange(1,100);
  9.     //设置按钮
  10.     QString qss = "QPushButton{background-color:black;color:red}QPushButton:hover{background-color:green}";
  11.     ui->pushButton->setStyleSheet(qss);
  12.     //设置下拉栏
  13.     QString qss1 = "QComboBox::drop-down{image:url(C:/Users/11214/Desktop/mn.jpg)}";
  14.     ui->comboBox->setStyleSheet(qss1);
  15.     //设置滑动条
  16.     QString qss2 = "QSlider::sub-page:horizontal{background-color:rgb(0,255,0)}\
  17.                     QSlider::groove:horizontal{background-color:lightgray}";
  18.     ui->slider->setStyleSheet(qss2);
  19.     //创建线程
  20.     t = new mythread(this);
  21.     QObject::connect(t,&mythread::sndSig,this,&Widget::readslot);
  22.     QObject::connect(this,&Widget::trigger,this,&Widget::startslot);
  23. }
  24. Widget::~Widget()
  25. {
  26.     t->terminate();
  27.     delete ui;
  28. }
  29. //点击按钮触发文件对话框
  30. void Widget::on_pushButton_clicked()
  31. {
  32.     QString fileName = QFileDialog::getOpenFileName(this,"打开文件","D:/qt.img","Text Files (*.*);;All Files (*)");
  33.     if(fileName.isEmpty()){
  34.         return;
  35.     }else{
  36.         emit trigger();
  37.         //QFile设置文件名
  38.         fd = new QFile(fileName);
  39.         //打开文件
  40.         fd->open(QIODevice::ReadOnly);
  41.         //将进度条的范围设置为文件的大小
  42.         ui->slider->setRange(0,fd->size());
  43.     }
  44. }
  45. void Widget::startslot()
  46. {
  47.    t->start();
  48. }
  49. void Widget::readslot()
  50. {
  51.     btarr = fd->read(maxsize);
  52.     size += maxsize;
  53.     //进度条随读取增长
  54.     ui->slider->setValue(size);
  55.     if(size >= fd->size()){
  56.         qDebug() << "读取完毕";
  57.         fd->close();
  58.         size = 0;
  59.         //关闭线程
  60.         t->terminate();
  61.     }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表