Qt软件开发-Qt编译zlib完成文件压缩解压(win10)
一、前言
在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用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.dll
和zlib1.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)相关推荐
- Qt编译zlib完成文件压缩解压(Ubuntu18.04)
一.前言 在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压.或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成.接下来介绍在zlib在Linu ...
- Qt基于QuaZIP实现文件压缩/解压(Win下)
Qt基于QuaZIP实现文件压缩/解压(Win下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.生成VS工程文件 3.使用VS进行编译 三.编译QuaZIP 1.下载QuaZIP源码 2 ...
- Qt基于QuaZIP实现文件压缩/解压(Linux下)
Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- linux jar和zip,Linux命令———zip和jar文件压缩解压
Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...
- linux压缩文件恢复,Linux文件压缩解压命令
Linux文件压缩解压命令QV7南京数据恢复-西数科技: 硬盘/手机/SSD数据恢复专家. 025-83608636 18913825606 tar功能:文件压缩解压QV7南京数据恢复-西数科技: 硬 ...
- 【文件压缩解压工具类-含密码】
文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...
- 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 ...
- 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天分享一个常用的压缩解压工具winrar. 为啥要搞这个无广告版呢(废话),总之网上 ...
- Linux 系统下文件压缩解压
Linux 系统压缩&解压文件 压缩永远是针对于一个独立文件进行的,一个文件夹(某目录下文件)想要进行压缩首先要进行打包,打包成一个文件,所以在 Windows 下常说的压缩是打包与压缩的总称 ...
最新文章
- hashMap与hashTable区别
- 路西法第一季为什么会被打伤_海贼王:路飞新招式‘红岩枪’,这次把凯多打伤了,大妈震惊...
- 基2FFT算法matlab程序编写,基2时抽8点FFT的matlab实现流程及FFT的内部机理
- 几个找pdf资源的网站
- Linux C/C++UDP通信实现
- macOS 开发 - Command Line Tool 命令行工具
- gif图片分解成序列帧(PS)
- java根据指定大小kb压缩图片
- Jenkins怎么发邮件,5年字节自动化大神手把手教你
- Wed Sep 16 2020 00:00:00 GMT+0800 (中国标准时间)时间转换为mysql date类型
- android 高德地图全套,android快速集成高德地图
- 旋转向量解法(罗德里格公式推导及理解)
- html设置发光字体制作,用CSS3制作炫酷的自定义发光文字
- 定义一个图形抽象类,完成三角形、圆形、矩形的周长和面积计算
- 多重共线性的诊断与对策
- z-index的使用及注意事项
- 赛车游戏java_Java 赛车游戏
- bury the hatchet
- 【AV1 spec学习一】OBU类型及码流结构
- Web安全基础-网络安全行业入门的各项介绍