参考文献: http://my.oschina.net/coda/blog?disp=2&p=1&catalog=0
Qt版本:qt-opensource-windows-x86-mingw491_opengl-5.4.1.exe
1、下载源码地址: http://sourceforge.net/projects/quazip/
2、 向Quazip中的quazip项目的.pri文件中添加QT中Zlib库的路径: INCLUDEPATH += "D:\Qt5.4.1\5.4\mingw491_32\ include\QtZlib"
3、对quazip执行“构建“,然后对Quazip大项目执行”qmake“,生成.dll和.a文件,再加上项目中的quazip头文件
由于是使用mingw,使用的是gcc for window编译器,其得到的静态库是以.a为后缀的,如果要的.lib为后缀的静态库需要安装msvc版本的Qt。
下载Qt版本:qt-opensource-windows-x86-msvc2010_opengl-5.4.0.exe,需要在之前安装vs2010集成开发环境,然后编译器就不用再额外安装。
使用:源码项目中qztest项目,记住更换Qt版本后,需要重新生成quazip的两个库文件,否则会出错。对于在直接运行.exe可执行文件会出现QtCore,dll缺失的情况,这里就要win7系统对其设置PATH路径,一个是D:\Qt\Qt5.4.0\5.4\msvc2010_opengl\bin,一个是D:\Qt\Qt5.4.0\Tools\QtCreator\bin
怎么使用qztest项目调用前面编译的两个库实现编解码操作,如下所示,对于怎么将需要的第三方文件添加到项目中,参考文献中有说明,自己也是根据他的思路来的。文件添加完成后,继续下面操作:
1、在pro文件中添加:
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/3rdparty/quazip/lib/ -lquazip
LIBS += -L$$PWD/3rdparty/quazip/bin/ -lquazip
}
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/3rdparty/quazip/lib/ -lquazip
LIBS += -L$$PWD/3rdparty/quazip/bin/ -lquazip
}
#else:unix: LIBS += -L$$OUT_PWD/../quazip/ -lquazip
INCLUDEPATH += $$PWD/3rdparty/quazip/include
DEPENDPATH += $$PWD/3rdparty/quazip/include
INCLUDEPATH += "D:\Qt\Qt5.4.0\5.4\msvc2010_opengl\include\QtZlib"
#INCLUDEPATH += $$PWD/..
#DEPENDPATH += $$PWD/../quazip
2、第三方文件则根据上述文献方法放在项目目录下。
顺便给出一个解压程序,专门针对zip的压缩包:
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;
}
使用在main函数中:
添加语句:Extract("f:/workspace/11.zip", "f:/" );解压
添加语句:bool b_isTrue = JlCompress::compressDir(QString("f:/tong.zip"), QString("f:/workspace"), true);//压缩,记住必须在release版本中,不能再debug版本运行。