基于QT实现的拷贝文件以及实时进度条(简易版)

简介: 1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。4.循环的去读取源文件中的数据,然后写入目标文件

 目录

界面实现效果

代码思路:

主要使用类:

打开和关闭文件

读取文件

写入文件


界面实现效果

image.gif 编辑

代码思路:

1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条

2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。

3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。

4.循环的去读取源文件中的数据,然后写入目标文件

主要使用类:

在Qt框架中,QFile类是一个用于读取和写入文件的高级IO类。它提供了读、写文件,以及文件操作(如移动、复制、删除)等功能的接口,支持文本和二进制模式。下面是一些基本使用方法和概念:

打开和关闭文件

  • 打开文件:使用open(OpenMode mode)方法打开文件,其中OpenMode是一个枚举类型,定义了多种打开模式,如QIODevice::ReadOnlyQIODevice::WriteOnlyQIODevice::ReadWrite等。
    Cpp
1QFile file("example.txt");
2if(file.open(QIODevice::ReadWrite | QIODevice::Text)) {
3    // 文件打开成功
4} else {
5    // 处理错误
6}
  • image.gif
  • 关闭文件:通常情况下,QFile会在析构函数中自动关闭,但也可以显式调用close()方法。

读取文件

  • 读取文本:可以使用QTextStream来读取文本文件。
    Cpp
1QTextStream in(&file);
2QString line;
3while(!in.atEnd()) {
4    line = in.readLine();
5    qDebug() << line;
6}
  • image.gif
  • 读取二进制数据:直接使用QFile的读取方法,如readAll()read(qint64 maxSize)等。
    Cpp
1QByteArray data = file.readAll();
  • image.gif

写入文件

  • 写入文本:同样使用QTextStream
    Cpp
1QTextStream out(&file);
2out << "Hello, Qt!" << endl;
  • image.gif
  • 写入二进制数据:使用write(const char *data, qint64 maxSize)
    Cpp
1QByteArray byteArray = "Binary Data";
2file.write(byteArray);
  • image.gif

代码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtWidgets>
#include <QString>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_action_triggered();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

image.gif

main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

image.gif

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#define KB 1024
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
//功能实现
void MainWindow::on_action_triggered()
{
    QByteArray buf;//接收读取的数据,因为QByteArray可以自动开辟需要的空间
    int num = 0;//进度条的赋值
    ui->progressBar->setValue(num);
    //打开文件
    QString fileName1 = QFileDialog::getOpenFileName(this, tr("打开文件"),".",
                                                      tr("all (*.*)"));
    //判错
    if(fileName1.isEmpty())
    {
        ui->statusBar->showMessage("打开文件失败",0);
        return;
    }
    //构造一个QFile对象
    QFile file1(fileName1);
    if(!file1.open(QIODevice::ReadOnly))
    {
        ui->statusBar->showMessage("打开文件失败",0);
        return;
    }
    //接受打开文件大小
    qint64 count = file1.size();
    qint64 cursize = 0;
    //保存文件接口
    QString fileName2 = QFileDialog::getSaveFileName(this, tr("复制文件"),
                                                     "./test",
                                                     tr("all (*.*)"));
    if(fileName2 == "")
    {
        return;
    }
    //构造第二个QFile对象
    QFile file2(fileName2);
    if(!file2.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        ui->statusBar->showMessage("保存文件失败",0);
        return;
    }
    else
    {
        //开始拷贝
        while(!file1.atEnd())//判尾函数
        {
            buf = file1.read(KB);//接收
            file2.write(buf);
            cursize += buf.size();
            num = 100*cursize/count;
            ui->progressBar->setValue(num);
        }
        ui->statusBar->showMessage("复制为文件成功",0);
    }
}

image.gif


相关文章
|
2月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
90 2
|
2月前
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
93 1
|
2月前
【QT】创建、打开QT项目只显示.pro文件的问题解决
【QT】创建、打开QT项目只显示.pro文件的问题解决
245 0
|
2月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
126 0
|
2月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
69 1
|
2月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
77 1
|
11天前
Qt颜色、文件、字体对话框
Qt颜色、文件、字体对话框
12 1
|
2月前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
2月前
|
XML 数据可视化 程序员
Qt 中的项目文件解析和命名规范
Qt 中的项目文件解析和命名规范
|
2月前
|
存储 JSON C++
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
102 0

热门文章

最新文章

推荐镜像

更多