麒麟正青春

 

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)

posted on 2020-11-13 11:25  麒麟正青春  阅读(2504)  评论(0编辑  收藏  举报

导航