Qt开发(1) 您所在的位置:网站首页 解压后exe文件无法打开 Qt开发(1)

Qt开发(1)

2023-12-25 03:31| 来源: 网络整理| 查看: 265

目录 一、QProcess + 7z优点缺点实现 二、qCompress优点缺点实现 三、Qzipwriter优点缺点实现 四、QuaZIP优点缺点实现 五、参考资料

一、QProcess + 7z 优点

执行外部进程,WinRAR和7zip都可以

缺点

依赖外部的压缩工具

实现

(1) 导入库文件 将7z.dll 和7z.exe放到工程目录下

(2) 压缩

void zipFolder(const QString& path) { QString sourcePath = path + "/compressFolder"; QDir sourceFolderDir(sourcePath); if (!sourceFolderDir.exists()) return; QString binPath = "C:/"; // 替换成7z.exe实际所在文件夹位置 QString destinationFolder = "D:/"; QString zipName = "zipFold_2023"; QString arguments{"a", destinationFolder + "/" + zipName, sourcePath}; QProcess process; process.start(binPath + "/7z.exe", arguments); process.waitForFinished(); }

(3) 解压缩

void unZipFolder(const QString& filePath) { if (!QFile::exists(filePath)) return; QString binPath = "C:/"; // 替换成7z.exe实际所在文件夹位置 QString destinationPath = "D:/"; QStringList arguments{ "x", "-o" + destinationPath, filePath, "-r", "-aoa" }; QProcess process; process.start(binPath + "/7z.exe", arguments); process.waitForFinished(); }

(4) 检查库文件是否存在 在调用7z.exe之前,最好检查一下库文件是否存在

void checkDepends(const QString& binPath) { QStringList depends{"7z.exe", "7z.dll"}; for(const QString& file : depends){ QString strFile = binPath + "/" + file; if (!QFile::exists(strFile)) { qWarning() QFile read("E:/1.data"); read.open(QIODevice::ReadOnly); QByteArray data; data = read.readAll(); read.close(); data = qUncompress(data); QFile temp("E:/1.bmp"); temp.open(QIODevice::WriteOnly); temp.write(data); temp.close(); 三、Qzipwriter 优点

Qt自己的库,生成zip格式

缺点

在 pro 文件中,添加“QT += gui-private”

实现

(1) 修改pro文件

QT += gui-private

(2) 导入头文件

#include #include

(3) 压缩

void zipWriter(QString path) { QZipWriter *writer = new QZipWriter(path + "/test.zip"); //添加文件夹 // writer->addDirectory(path + "/ss"); //添加文件 QFile file(path + "/test.txt"); if (!file.exists()) { return; } file.open(QIODevice::ReadOnly); writer->addFile("test.txt", file.readAll()); file.close(); writer->close(); }

(4) 解压

void zipReader(QString path) { QZipReader reader(path + "/test.zip"); reader.extractAll(path); QFile file(path); file.open(QIODevice::WriteOnly); file.write(reader.fileData(QString::fromLocal8Bit("%1").arg(path + "/Desktop"))); file.close(); reader.close(); } 四、QuaZIP 优点

适用于多种平台,且打包后的zip文件可以通过其它工具打开

缺点

QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库。 依赖Zlip,因此编译QuaZIP库需要依赖zlip库。

实现

(1)接口说明 QuaZip中的JlCompress类用来压缩和解压缩文件

/** 压缩文件夹 参数一fileCompressed:压缩后的文件 参数二dir:待压缩的目录 参数三recursive:是否递归 **/ static bool compressDir(QString fileCompressed, QString dir = QString(), bool recursive = true); /** 解压缩文件夹 参数一fileCompressed:待解压缩的文件 参数二fileCompressed:解压缩存放的目录 **/ static QStringList extractDir(QString fileCompressed, QString dir = QString());

(2) 配置 编好的QuaZip放入工程目录下 在工程中将quazip.lib所在库目录、头文件所在的目录添加到工程中。 pro中添加:

LIBS += -L"D:/quazip/lib" -lquazip INCLUDEPATH += D:/quazip/src DEPENDPATH += D:/quazip/src

(3) 压缩/解压缩

#include #include "JlCompress.h" // 导入QuaZip头文件 int main(int argc, char **argv) { QApplication app(argc,argv); // 压缩文件夹 JlCompress::compressDir("F:\\QuaZip.zip", "F:\\QuaZip"); // 解压缩文件夹 JlCompress::extractDir("F:\\QuaZip.zip", "F:\\ExtractQuaZip"); return app.exec(); } 五、参考资料

Qt下压缩解压文件夹(2)Qzipwriter Qzipreader_黄权浩的博客-CSDN博客 利用Qt的qCompress和qUncompress来压缩和解压文件_prompty的博客-CSDN博客 Qt之zip压缩/解压缩-QuaZIP-阿里云开发者社区



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有