qt5.15.1引用第三方压缩解压库quazip
Qt中用QuaZip来压缩和解压缩文件
一、简介
QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库。如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它。
官方主页:http://quazip.sourceforge.net/
souceforge下载地址:http://sourceforge.net/projects/quazip/
Qt的c++ zlib(zlib.h,zconf.h)中提供了qCompress/qUncompress来进行文件的压缩与解压,但存在两个问题:
1、无法很好地压缩/解压缩文件夹。
2、只能将一个文件压缩为某种格式,压缩后的文件无法通过其它解压工具打开(如:7zip,或WinRAR),只能通过qUncompress解压读取,也就是说qCompress生成的压缩文件不包含普通压缩文件的一些头信息,导致无法解压。
二、下载解压quazip源程序,通过qt打开编译程序
1、打开quazip下的quazip.pro项目,在quazip.pro中修改,将SUBDIRS=quazip qztest前添加#注释该句,添加SUBDIRS=quazip 。意思是注释掉测试程序qztest项目的编译;
2、修改第二级quazip目录下的quazip.pro文件,因quazip是基于zlib库的需要在quazip.pro中引入zlib库路径,qt中自带了zlib库,路径在Qt安装目录下/5.15.1/Src/qtbase/src/3rdparty/zlib/src或者可以通过环境变量引用。
添加如下语句:
INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib
或者INCLUDEPATH+=C:/Qt/5.15.1/Src/qtbase/src/3rdparty/zlib/src
三、在window环境下可以编译位下面几类库,对应实际项目引用相应库:
Mingw32
Mingw64
Msvc32
Msvc64
出现下方提示表示库编译成功。
四、编译后的内容:
Mingw32-release
Mingw64-release
Msvc32-release
Msvc64-release
打开最终的release目录
五、在引用quazip 库的项目的项目文件如:dbManage.pro中添加第三方库的引用,
qt在项目上右键—添加库可以打开添加库窗口,或者在打开的dbManage.pro中右键—添加库也可以打开添加库窗口,
六、把quazip二级目录下的头文件(.h)和qt源程序下的zlib库引用的头文件(zlib.h,zconf.h)全部添加到引用项目中。
如果缺少了某个头文件,会有错误提示:*.h: No such file or directory
七、在项目中添加#include "JlCompress.h"然后就可以使用压缩解压函数。
如:
JlCompress::compressDir("d:\\test.zip", "d:\\test"); //压缩
JlCompress::extractDir("d:\\test.zip", "d:\\test");//解压缩
八、msvc编译方式下需要(mingw编译不需要)把quazip编译生成的release目录下的所有文件拷贝到引用quazip 库的项目编译产生的相应release目录下。
如果通过引用项目自动生成quazip的moc文件,会有错误提示如下:
#编译时出现错误:C2491: “QuaGzipFile::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
#把产生的所有文件(release目录下)加入到引用项目的目录(release目录下),
#如果项目中只引入头文件(*.h)和dll和lib文件,项目中会重新生成moc_*.cpp和moc_*.obj中的staticMetaObject出现错误提示
QuaZIP类说明
类 |
说明 |
JlCompress |
典型操作工具类 |
QuaAdler32 |
Adler32算法校验和 |
QuaChecksum32 |
校验和接口 |
QuaCrc32 |
CRC32校验和 |
QuaGzipFile |
GZIP 文件操作 |
QuaZIODevice |
压缩/解压 QIODevice |
QuaZip |
ZIP 文件 |
QuaZipDir |
ZIP文件内目录导航 |
QuaZipFile |
ZIP文件内的文件 |
QuaZipFileInfo |
ZIP压缩包内的文件信息 |
QuaZipFilePrivate |
QuaZip的接口 |
QuaZipNewInfo |
被创建的文件信息 |
QuaZipPrivate |
QuaZIP内部类 |
使用
接口说明
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());
其中mingw和msvc方式生成的文件后缀有区别(.o , .a , .h , .dll , .cpp)和(.obj , .lib , .h , .dll ,.cpp , .exp)