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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM