首先我的开发环境是windows10,qtvs2015,vs2015。
一、zlib的编译
1、官网下载最新的zlib源码,最新的是1.2.8
2、用vs自带的命令行工具(编译32位的dll选x86,64位的选x64)进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库) zdll.lib(动态库的导入库) zlib1.dll(动态库) 。必要的头文件有zlib.h和zconf.h。
二、quazip的编译
1、quazip是zlib的封装库,下载源码后用QT打开,编译需要依赖zlib库,右键项目添加库选外部库就好。我添加后在.pro文件末尾会生成下面配置,注意编译64位的quazip,使用的zlib也必须是64位的
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../zlib64/ -lzdll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../zlib64/ -lzdll
else:unix: LIBS += -L$$PWD/../zlib64/ -lzdll
INCLUDEPATH += $$PWD/../zlib64
DEPENDPATH += $$PWD/../zlib64
INCLUDEPATH是头文件路径
2、右键项目构建会生成quazip.lib和quazip.dll,注意zlib和quazip的默认字符集都是ANSI,在调用的文件的字符集也必须是ANSI,否则编译不过,使用utf-8的话,都必须是utf-8.
三、使用
1、使用时同样需要添加外部库zlib和quazip,字符集需要和dll一样,下面是一段解压缩代码
bool extract(const QString& in_file_path, const QString& out_file_path)
{
QuaZip archive(in_file_path);
if (!archive.open(QuaZip::mdUnzip))
return false;
QString path = out_file_path;
if (!path.endsWith("/") && !out_file_path.endsWith("\\"))
path += "/";
QDir dir(out_file_path);
if (!dir.exists())
dir.mkpath(out_file_path);
for( bool f = archive.goToFirstFile(); f; f = archive.goToNextFile() )
{
QString filePath = archive.getCurrentFileName();
QuaZipFile zFile(archive.getZipName(), filePath);
zFile.open(QIODevice::ReadOnly );
QByteArray ba = zFile.readAll();
zFile.close();
if (filePath.endsWith("/"))
{
dir.mkpath(filePath);
}
else
{
QFile dstFile(path + filePath);
if (!dstFile.open(QIODevice::WriteOnly))
return false;
dstFile.write(ba);
dstFile.close();
}
}
return true;
}
2、构建运行,新版QT运行需要拷贝qtvs2015下的plugins下的platforms文件夹到debug或release里边运行,还需要zlib1.dll和quazip.dll放到生成的exe同级目录下。运行没反应的话检查防火墙和杀毒。