基于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


相关文章
|
3月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
33 0
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
692 4
|
3月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
155 1
|
3月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
697 0
|
3月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
5月前
Qt颜色、文件、字体对话框
Qt颜色、文件、字体对话框
|
6月前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
178 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
88 0