qt编译zlib完成文件压缩解压(ubuntu18.04)(代码片段)

DS小龙哥 DS小龙哥     2023-03-16     135

关键词:

一、前言

在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成。接下来介绍在zlib在Linux(Ubuntu18.04)下如何利用Qt进行编译,调用,完成zip文件打包生成例子。可以单文件压缩打包,多文件压缩打包,目录压缩打包等等。

如果需要在windows下使用zlib,请看这里:
https://blog.csdn.net/xiaolong1126626497/article/details/126703153

二、开发环境

操作系统:  Ubuntu18.04 64位
Qt版本 :  Qt5.12.6
编译器 :  GCC 64bit

三、编译zlib

(1)下载zlib

地址: http://www.zlib.net/

(2)解压

新建一个目录,将下载的压缩包解压到当前目录。

wbyq@wbyq:~/work_pc$ mkdir zlib
wbyq@wbyq:~/work_pc$ cd zlib/
wbyq@wbyq:~/work_pc/zlib$ tar xvf /home/wbyq/下载/zlib-1.2.12.tar.gz

(3)编译安装

如果想要配置安装的路径,可以用–prefix=指定,例如:--prefix=$PWD/_install。如果不配置安装路径,默认就安装在/usr/local/目录下

wbyq@wbyq:~/work_pc/zlib/zlib-1.2.12$ ./configure
wbyq@wbyq:~/work_pc/zlib/zlib-1.2.12$ make
wbyq@wbyq:~/work_pc/zlib/zlib-1.2.12$ sudo make install
rm -f /usr/local/lib/libz.a
cp libz.a /usr/local/lib
chmod 644 /usr/local/lib/libz.a
cp libz.so.1.2.12 /usr/local/lib
chmod 755 /usr/local/lib/libz.so.1.2.12
rm -f /usr/local/share/man/man3/zlib.3
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
rm -f /usr/local/lib/pkgconfig/zlib.pc
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
rm -f /usr/local/include/zlib.h /usr/local/include/zconf.h
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h

四、编译quazip

(1)下载quazip

下载地址: https://sourceforge.net/projects/quazip/

(2)解压

和刚才的zlib一样,下载后解压。

wbyq@wbyq:~/work_pc/zlib$ unzip /mnt/hgfs/linux-share-dir/quazip-0.7.3.zip

### (3)配置项目

quazip-0.7.3是一个Qt工程,双击打开pro文件即可。

打开quazip.pro文件,删除 SUBDTRS后面的qztest

打开pro文件,加上zlib库引用

LIBS += -lz

因为刚才编译zlib之后,直接将文件安装到系统用户目录下了,这里就不用去指定路径。

(4) 编译

配置完毕后,点击左下角的锤子按钮进行构建项目。

在构建目录下可以看到生成的动态库。

为了方便接下来的使用,将生成的动态库文件和头文件拷贝到/usr/local/lib//usr/local/include/目录下。

拷贝库文件: (拷贝时。cp命令后加上-d选项,保留文件之间的链接关系)

wbyq@wbyq:~/work_pc/zlib/build-quazip-Desktop_Qt_5_12_6_GCC_64bit-Release/quazip$ ls
libquazip.so  libquazip.so.1  libquazip.so.1.0  libquazip.so.1.0.0  Makefile
wbyq@wbyq:~/work_pc/zlib/build-quazip-Desktop_Qt_5_12_6_GCC_64bit-Release/quazip$ sudo cp *.so* /usr/local/lib/ -d

拷贝头文件:

wbyq@wbyq:~/work_pc/zlib/quazip-0.7.3/quazip$ pwd
/home/wbyq/work_pc/zlib/quazip-0.7.3/quazip
wbyq@wbyq:~/work_pc/zlib/quazip-0.7.3/quazip$ ls
CMakeLists.txt  JlCompress.h     quacrc32.h        quazipdir.cpp       quazip_global.h    quazip.sln              unzip.h
crypt.h         qioapi.cpp       quagzipfile.cpp   quazipdir.h         quazip.h           quazip.vcproj           zip.c
debian          quaadler32.cpp   quagzipfile.h     quazipfile.cpp      quazipnewinfo.cpp  quazip.vcxproj          zip.h
doc             quaadler32.h     quaziodevice.cpp  quazipfile.h        quazipnewinfo.h    quazip.vcxproj.filters
ioapi.h         quachecksum32.h  quaziodevice.h    quazipfileinfo.cpp  quazip.pri         run_moc.bat
JlCompress.cpp  quacrc32.cpp     quazip.cpp        quazipfileinfo.h    quazip.pro         unzip.c
wbyq@wbyq:~/work_pc/zlib/quazip-0.7.3/quazip$ sudo cp *.h /usr/local/include/

五、新建项目测试文件压缩

(1)新建一个Qt工程

(2)修改Pro文件

在Pro文件里引入库文件:

LIBS += -lquazip

(3)压缩方法

在工程里引用JlCompress.h头文件。

#include "JlCompress.h"

常用的静态压缩方法:

static bool compressDir(QString fileCompressed, QString dir,
                            bool recursive, QDir::Filters filters);

static bool compressFile(QString fileCompressed, QString file);

static bool compressFiles(QString fileCompressed, QStringList files);

引用示例:

JlCompress::compressDir(); //压缩目录
JlCompress::compressFile(); //压缩文件
JlCompress::compressFiles(); //压缩文件列表

(4)编写测试Demo

error while loading shared libraries: libquazip.so.1: cannot open shared object file: No such file or directory

运行时如果提示找不到libquazip库,将libquazip相关的库拷贝到可执行文件同级目录下即可。

wbyq@wbyq:~/qt_code/build-zlib_Demo-Desktop_Qt_5_12_6_GCC_64bit-Release$ cp /home/wbyq/work_pc/zlib/build-quazip-Desktop_Qt_5_12_6_GCC_64bit-Release/quazip/*.so* ./ -d

Demo运行效果:

选择待压缩的文件:

选择成功,开始压缩:

压缩成功:

六、源代码

说明: 这是测试的Demo,代码里没有使用线程。压缩的时候比较耗费时间,如果文件多UI界面会无响应。正式使用,放到子线程里即可。

(1)widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "JlCompress.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)

    ui->setupUi(this);



Widget::~Widget()

    delete ui;


//选择压缩的文件列表
void Widget::on_pushButton_select_clicked()

    filenamelist=QFileDialog::getOpenFileNames(this,"选择待压缩的文件","C:/",tr("*.*"));
    if(filenamelist.size()<=0)return;

    QString file_file;
    for(int i=0;i<filenamelist.count();i++)
    
       file_file+=filenamelist.at(i)+"\\r\\n"; //循环取出列表中的文件名称
    
    ui->plainTextEdit->setPlainText(file_file);




//开始压缩打包
void Widget::on_pushButton_start_clicked()

    QString filename=QFileDialog::getSaveFileName(this,"压缩后文件名称","C:/",tr("*.zip"));
    if(filename.isEmpty())return;

    bool state=JlCompress::compressFiles(filename,filenamelist); //压缩文件列表
    if(state)
    
        ui->lineEdit->setText("压缩成功:"+filename);
    
    else
    
        ui->lineEdit->setText("压缩失败.");
    

(2)widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFileDialog>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui  class Widget; 
QT_END_NAMESPACE

class Widget : public QWidget

    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_select_clicked();

    void on_pushButton_start_clicked();

private:
    Ui::Widget *ui;

    QStringList filenamelist;
;
#endif // WIDGET_H

c++基于zlib压缩库的数据或文件的压缩与解压缩小程序(代码片段)

文章目录项目展示项目开发编译设置1.Debug/Release编译模式下的编译设置设计思路1.数据或文件的压缩思路2.数据或文件的解压缩思路编码实现1.导入ZLIB库文件2.文件压缩3.文件解压缩4.将数据保存为文件程序测试项目链接项目展示... 查看详情

qt+opengl(03)--libpng库的编译

1.zlib库的下载http://www.zlib.net/zlib1211.zip2.libpng库的下载https://libpng.sourceforge.io/index.htmllpng1637.zip3.解压zlib1211.zip与lpng1637.zip到同一个文件目录下并重命名zlib1211.zip解压后的文件夹zlib-1.2.11为zlib结果如下4.修改lpng1637\ 查看详情

qt自定义安装包(代码片段)

...下载zlib,链接如下:http://www.zlib.net/    下载后编译一下    1.2 quazip    下载quazip,链接如下https://sourceforge.net/projects/quazip/files/quazip/0.7.3/    下载后,点击下面的pro文件开始编译    1.3使用方法    主... 查看详情

qt自定义安装包(代码片段)

...下载zlib,链接如下:http://www.zlib.net/    下载后编译一下    1.2 quazip    下载quazip,链接如下https://sourceforge.net/projects/quazip/files/quazip/0.7.3/    下载后,点击下面的pro文件开始编译    1.3使用方法    主... 查看详情

qt学习_qt压缩文件zip编译(代码片段)

QT压缩文件ZIP编译环境准备系统变量里加入:C:\\Windows\\System32D:\\ProgramFiles(x86)\\MicrosoftVisualStudio14.0\\VC准备工具zlib源码下载:http://www.zlib.net/quazip源码下载:https://sourceforge.net/projects/quazip 查看详情

qt中用quazip来压缩和解压缩文件

...ge.net/souceforge下载地址:http://sourceforge.net/projects/quazip/2、编译QuaZip是基于Zlib库的,编译前要 查看详情

qt+opengl(02)--zlib库的编译

1.zlib库的下载http://www.zlib.net/zlib1211.zip2.解压3.进入 zlib1211\\zlib-1.2.11\\contrib\\vstudio\\vc14目录4.用VS打开zlibvc.sln文件5.点击菜单“生成”—>”生成解决方案”已生成的zlibwapi.lib和zlibwapi.dll在目录zlib1211\\zlib-1.2.11\\ 查看详情

Ruby zlib 库解压 gzip 文件非常慢

】Rubyzlib库解压gzip文件非常慢【英文标题】:RubyzlibLibraryVerySlowtoDecompressgzipFile【发布时间】:2016-10-1402:00:35【问题描述】:我正在使用Ruby的ZLib库来解压缩一个很小的​​(10k)gzip文件(在内存中使用StringIO类),它需要大约2.5秒... 查看详情

使用 GTMNSData+zlib 解压 NSData

...PK。我已经阅读解压缩它们我可以使用GTMNSData+zlib类别。编译我的项目,我得到一些错误,例如:"_inflate",referencedfrom:+[NSData(GTMZ 查看详情

解压后如何取回原来的字符串 - Zlib

...用Zlib压缩和解压缩字符串。这是我用来压缩和解压缩的JS文件。压缩代码:compress_string=function()varstring=document.getElementById("input_ 查看详情

delphi使用zlib压缩和解压gzip(代码片段)

...sp;  ZLib是DEFLATE算法的实现库,它的API同时支持gzip文件格式以及一个简化的数据流格式。zlib数据流格式、DEFLATE以及gzip文件格式均已被分别标准化为RFC1950、RFC1951、RFC1952。  gzip在HTTP压缩,一种在万维网中加速传输H... 查看详情

ubuntu怎么安装qt-everywhere-enterprise-src-5.2.1.tar.gz文件

参考技术A这种是源码安装,主要步骤是解压源码包编译安装具体如下----------------------------------现在我们需要把下载来的压缩文件解压,解压.tar.gz的文件,我们可以用以下命令(假设包含源代码的压缩文件是linuxidc.tar.gz)tar-xvzfl... 查看详情

ubuntu18.04arm编译安装qtqtcreator,及操作过程中异常解决方式(代码片段)

这里是Ubuntu18.04ARM,编译安装的是qt5.9.7,qtcreator4.7.1 1、准备好qt、qtcreator源码包,     qt5.9.7下载地址:点击下载    qtcreator4.7.1下载地址:点击下载2、安装依赖sudoapt-getupdatesudoapt-getupgradesudoapt-getinstallgper... 查看详情

c/c++自制一个基于zlib的文件的(解)压缩系统(代码片段)

文章目录项目展示项目开发编译设置1.Debug/Release编译模式下的编译设置设计思路1.数据或文件的压缩思路2.数据或文件的解压缩思路编码实现1.导入ZLIB库文件2.文件压缩3.文件解压缩4.将数据保存为文件程序测试项目链接项目展示... 查看详情

qt之zip压缩/解压缩(quazip)

...库。适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它工具打开。简述QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库。适用于多种平台,利用它可以很... 查看详情

make/cmake:海思himix200交叉编译zlib(代码片段)

因为zlib没有任何依赖库,而且代码很成熟,交叉编译还是比较简单的.编译环境Ubuntu16.04x86_64himix2000编译工具链下载openssl源码wgethttp://zlib.net/fossils/zlib-1.2.9.tar.gz解压源码tarxvfzlib-1.2.9.tar.gzCMAKE编译如果你有安装cmake,可以使用cmake来完... 查看详情

lnmp搭建

解压pcre压缩包编译生成安装解压openssl压缩包编译生成!安装编辑profile解压zlib编译生成安装解压nginx编译/configure--prefix=/usr/local/nginx--without-http_memcached_module--user=www--group=www--with-http_stub_status_module--with-http_ssl_mod 查看详情

zlib编译

...VS2019打开E:osgzlibzlib-1.2.11contribvstudiovc14zlibvc.sln文件4.修改编译类型5.修改“生成前事件”的命令行将其内容改为:E:cdE:osgzlibzlib-1.2.11contribmasmx64bld_ml64.bat6.编译 查看详情