一、前言

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

二、开发环境

操作系统:  win10 64位
Qt版本 :  Qt5.12.6
编译器 :  MinGW 32

三、编译zlib

(1)下载zlib

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

(2)解压

新建一个文件夹(英文路径),将下载的zlib压缩文件拷贝进去解压。

(3)编译

点击windows状态栏左下角的windows图标,弹出页面,找到Qt目录,找到对应编译器控制台入口。

我这里使用的minGW32,如果使用其他编译器自行选择即可。

进去之后,输入cd命令,切换到zlib源码解压目录下。

C:\Qt\Qt5.12.6\5.12.6\mingw73_32>cd /d D:\out\zlib_demo\zlib-1.2.12

输入命令进行编译:(详情看命令行的执行)

C:\Qt\Qt5.12.6\5.12.6\mingw73_32>cd /d D:\out\zlib_demo\zlib-1.2.12D:\out\zlib_demo\zlib-1.2.12>copy win32\Makefile.gcc makefile.gcc
已复制         1 个文件。
D:\out\zlib_demo\zlib-1.2.12>mingw32-make -f makefile.gcc
gcc  -O3 -Wall -c -o adler32.o adler32.c
gcc  -O3 -Wall -c -o compress.o compress.c
gcc  -O3 -Wall -c -o crc32.o crc32.c
gcc  -O3 -Wall -c -o deflate.o deflate.c
gcc  -O3 -Wall -c -o gzclose.o gzclose.c
gcc  -O3 -Wall -c -o gzlib.o gzlib.c
gcc  -O3 -Wall -c -o gzread.o gzread.c
gcc  -O3 -Wall -c -o gzwrite.o gzwrite.c
gcc  -O3 -Wall -c -o infback.o infback.c
gcc  -O3 -Wall -c -o inffast.o inffast.c
gcc  -O3 -Wall -c -o inflate.o inflate.c
gcc  -O3 -Wall -c -o inftrees.o inftrees.c
gcc  -O3 -Wall -c -o trees.o trees.c
gcc  -O3 -Wall -c -o uncompr.o uncompr.c
gcc  -O3 -Wall -c -o zutil.o zutil.c
ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
windres --define GCC_WINDRES -o zlibrc.o win32/zlib1.rc
gcc -shared -Wl,--out-implib,libz.dll.a  \
-o zlib1.dll win32/zlib.def adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o  zlibrc.o
strip zlib1.dll
gcc  -O3 -Wall -I. -c -o example.o test/example.c
gcc  -o example.exe example.o libz.a
strip example.exe
gcc  -O3 -Wall -I. -c -o minigzip.o test/minigzip.c
gcc  -o minigzip.exe minigzip.o libz.a
strip minigzip.exe
gcc  -o example_d.exe example.o libz.dll.a
strip example_d.exe
gcc  -o minigzip_d.exe minigzip.o libz.dll.a
strip minigzip_d.exeD:\out\zlib_demo\zlib-1.2.12>

编译完成,生成了动态库。

(4)提取头文件和库文件

为了方便接下来使用,把编译好的动态库和头文件单独拷贝出来。

四、编译quazip

(1)下载quazip

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

(2)解压

和刚才的zlib一样,拷贝到新建的非中文路径下解压。

### (3)配置项目

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

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

打开pro文件,加上zlib库和头文件的路径。

INCLUDEPATH += D:/out/zlib_demo/zlib_lib_MinGw32
LIBS += -L D:/out/zlib_demo/zlib_lib_MinGw32 -lzlib1

这里添加的路径就是刚才编译zlib后,单独拷贝出来的库和头文件。

(4) 编译

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

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

为了方便接下来的使用,新建一个quazip_lib_mingw32目录,把生成的库文件和相关的头文件拷贝到该目录下。

头文件是在quazip源码的quazip-0.7.3\quazip目录下。把这个目录下的全部.h文件拷贝出来即可。

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

(1)新建一个Qt工程

(2)拷贝相关的库过来

把刚才编译好的quazip库文件和头文件拷贝到工程目录下。 (刚才已经把库文件和头文件已经搜集到一起了,直接把目录拷贝过来即可)

在Pro文件里引入头文件和库文件:

INCLUDEPATH += $$PWD/quazip_lib_mingw32
LIBS += -L$$PWD/quazip_lib_mingw32 -lquazip

项目类型改为Release:

(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

程序构建运行时,记得把quazip.dllzlib1.dll库拷贝到程序运行同级目录下:

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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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

七、编译MSVC版本的quazip库

资源下载地址: https://download.csdn.net/download/xiaolong1126626497/86500275

(1)先编译MSVC版本的zlib库

得到如下文件:

D:\out\zlib_demo\zlib1211四种msvc动态库静态库>tree
├─zlib-1.2.11-debug-msvc32
│  ├─bin
│  ├─include
│  ├─lib
│  └─share
├─zlib-1.2.11-debug-msvc64
│  ├─bin
│  ├─include
│  ├─lib
│  └─share
├─zlib-1.2.11-release-msvc32
│  ├─bin
│  ├─include
│  ├─lib
│  └─share
└─zlib-1.2.11-release-msvc64├─bin├─include├─lib└─share

编译quazip的时候需要:

(2)编译quazip

INCLUDEPATH += D:/out/zlib_demo/quazip-0.7.3/zlib-1.2.11-release-msvc64/include
LIBS +=D:/out/zlib_demo/quazip-0.7.3/zlib-1.2.11-release-msvc64/share/zlibwapi.lib

编译生成的文件:

(3)工程中使用

# MSVC 64位的库
INCLUDEPATH += $$PWD/zlib_msvc64
LIBS += -L$$PWD/zlib_msvc64 -lquazip

这个zlib_msvc6目录下存放文件如下:

MSVC-64位版本运行成功:

Qt软件开发-Qt编译zlib完成文件压缩解压(win10)相关推荐

  1. Qt编译zlib完成文件压缩解压(Ubuntu18.04)

    一.前言 在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压.或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成.接下来介绍在zlib在Linu ...

  2. Qt基于QuaZIP实现文件压缩/解压(Win下)

    Qt基于QuaZIP实现文件压缩/解压(Win下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.生成VS工程文件 3.使用VS进行编译 三.编译QuaZIP 1.下载QuaZIP源码 2 ...

  3. Qt基于QuaZIP实现文件压缩/解压(Linux下)

    Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...

  4. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  5. linux jar和zip,Linux命令———zip和jar文件压缩解压

    Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...

  6. linux压缩文件恢复,Linux文件压缩解压命令

    Linux文件压缩解压命令QV7南京数据恢复-西数科技: 硬盘/手机/SSD数据恢复专家. 025-83608636 18913825606 tar功能:文件压缩解压QV7南京数据恢复-西数科技: 硬 ...

  7. 【文件压缩解压工具类-含密码】

    文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...

  8. Linux常用文件压缩/解压命令格式大全(tar、gzip、bzip2、zip、compress、cpio、compress、dd)建议收藏

    Linux常用文件压缩/解压命令格式大全 1. tar 2. gzip 3. bzip2 4. zip 5. compress 6. cpio 7.dd 1. tar 打包备份后的文件包缀:.tar ...

  9. 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天分享一个常用的压缩解压工具winrar. 为啥要搞这个无广告版呢(废话),总之网上 ...

  10. Linux 系统下文件压缩解压

    Linux 系统压缩&解压文件 压缩永远是针对于一个独立文件进行的,一个文件夹(某目录下文件)想要进行压缩首先要进行打包,打包成一个文件,所以在 Windows 下常说的压缩是打包与压缩的总称 ...

最新文章

  1. hashMap与hashTable区别
  2. 路西法第一季为什么会被打伤_海贼王:路飞新招式‘红岩枪’,这次把凯多打伤了,大妈震惊...
  3. 基2FFT算法matlab程序编写,基2时抽8点FFT的matlab实现流程及FFT的内部机理
  4. 几个找pdf资源的网站
  5. Linux C/C++UDP通信实现
  6. macOS 开发 - Command Line Tool 命令行工具
  7. gif图片分解成序列帧(PS)
  8. java根据指定大小kb压缩图片
  9. Jenkins怎么发邮件,5年字节自动化大神手把手教你
  10. Wed Sep 16 2020 00:00:00 GMT+0800 (中国标准时间)时间转换为mysql date类型
  11. android 高德地图全套,android快速集成高德地图
  12. 旋转向量解法(罗德里格公式推导及理解)
  13. html设置发光字体制作,用CSS3制作炫酷的自定义发光文字
  14. 定义一个图形抽象类,完成三角形、圆形、矩形的周长和面积计算
  15. 多重共线性的诊断与对策
  16. z-index的使用及注意事项
  17. 赛车游戏java_Java 赛车游戏
  18. bury the hatchet
  19. 【AV1 spec学习一】OBU类型及码流结构
  20. Web安全基础-网络安全行业入门的各项介绍

热门文章

  1. wps文档一敲空格就换行_wps敲空格变成点
  2. UE4官方文档链接记录
  3. 如何查看自己的CSDN地址
  4. 单片机控制直流电机正反转
  5. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(五)许可证配置
  6. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(一)前期准备
  7. Delphi2007的重构功能
  8. SQL Server 启动错误 系统找不到指定的文件/路径
  9. ps笔刷套装:逼真下雪/落雪效果
  10. PostgreSQL如何自动更新时间戳?