目录
界面实现效果
编辑
代码思路:
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条
2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。
3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。
4.循环的去读取源文件中的数据,然后写入目标文件
主要使用类:
在Qt框架中,QFile
类是一个用于读取和写入文件的高级IO类。它提供了读、写文件,以及文件操作(如移动、复制、删除)等功能的接口,支持文本和二进制模式。下面是一些基本使用方法和概念:
打开和关闭文件
- 打开文件:使用
open(OpenMode mode)
方法打开文件,其中OpenMode
是一个枚举类型,定义了多种打开模式,如QIODevice::ReadOnly
、QIODevice::WriteOnly
、QIODevice::ReadWrite
等。
Cpp
1QFile file("example.txt"); 2if(file.open(QIODevice::ReadWrite | QIODevice::Text)) { 3 // 文件打开成功 4} else { 5 // 处理错误 6}
- 关闭文件:通常情况下,
QFile
会在析构函数中自动关闭,但也可以显式调用close()
方法。
读取文件
- 读取文本:可以使用
QTextStream
来读取文本文件。
Cpp
1QTextStream in(&file); 2QString line; 3while(!in.atEnd()) { 4 line = in.readLine(); 5 qDebug() << line; 6}
- 读取二进制数据:直接使用
QFile
的读取方法,如readAll()
、read(qint64 maxSize)
等。
Cpp
1QByteArray data = file.readAll();
写入文件
- 写入文本:同样使用
QTextStream
。
Cpp
1QTextStream out(&file); 2out << "Hello, Qt!" << endl;
- 写入二进制数据:使用
write(const char *data, qint64 maxSize)
。
Cpp
1QByteArray byteArray = "Binary Data"; 2file.write(byteArray);
代码:
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
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
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); } }