1. 程式人生 > 實用技巧 >qt5.15.1引用第三方壓縮解壓庫quazip

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源程式,如c:\ c++ zlib,通過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)