关键词:
一、前言
在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用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.编译 查看详情