Qt 编程指南 9 软件打包
Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑 里无法正常运行。因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。
平台
使用此一样例说明所有打包过程
- VS2013
- QT
- Opencv2.4.1.3(64位)
集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:
Qt Widgets Application 和 Qt Quick Application。
下面分别介绍这两类exe 的发布方式。
1、Qt Widgets Application可执行程序发布方式
1.1 用 QtCreator 新建一个 Qt Widgets Application 项目,直接用默认的 QMainWindow 程序就可以了,项目名字假定是 Qt_Window。
然后以 Release 方式编译生成 exe 程序:
然后在工程目录生成的Release 文件夹下找到生成的 Qt_Window.exe
复制到桌面文件夹EXE下(随意选取路径)
1.2 打开命令行
进入刚才创建的EXE文件夹目录下
- cd Desktop\EXE
然后使用windeployqt自动生成链接库工具, 执行
- windeployqt Qt_Window.exe
之后看到,EXE文件夹下自动生成各种QT库文件
文件夹里看到 windeployqt 工具自动复制的插件文件夹
和 dll文件、qm文件。这时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。
2 如果还依赖了第三方库文件(例如Opencv)需要手动复制进来。
- windeployqt 是QT自带的工具,所以只能访问QT本身路径包含的库文件,所以Opencv甚至VS2013的基本库要自己添加。
2.1:下载并安装 process explorer软件,因为可以用它来查看Qt_Window.exe用到了那些第三方库的dll.
2.2:打开 process explorer, 将菜单 View -> Lower Plane View -> Dlls 勾选上。再运行Qt_Window.exe。就可以在process explorer中查看第三方库的dll.如下图:
在其中我们发现 依赖的Opencv库有三个
双击第三方依赖库,弹出如下图对话框,点击Explore, 将相应的 dll 复制粘贴到 EXE文件夹中。完成所有第三方库的复制
将这三个库复制到EXE文件夹下
之后整体就可以复制到另外一台电脑,成功运行。
(默认另外一台电脑需要安装好VS2013,不然还要像添加opencv库一样,把VS调用的基本库添加进去)
如下图中VS2013调用的库
3 如果还有其他QT和VS2013以外的依赖库,类似第二步加添。
第二种界面EXE生成暂时用不到,待续
参看:http://tieba.baidu.com/p/3730103947?pn=1
4 生成安装文件
软件下载
https://www.sogou.com/sogou?query=setup2go&pid=sogou-wsse-91e50fe1e39af286
教程参考:
http://www.uzzf.com/news/31/1021_1.html
安装设置默认
系统需求设置最小安装空间
插入打包好的exe文件夹
设置快捷方式
选择要生成的快捷方式文件
设置快捷方式的图标
没有设置注册表
闪图自定义设置
外部工具 无设置
初始化参数文件 无设置
最后生成
设置输出路径+图标+安装包名字,点击建立
生成安装文件
安装测试
安装成功
运行
卸载
Qt 编程指南 9 软件打包的更多相关文章
- Qt 编程指南
Qt 编程指南 持续关注一本正在编写的Qt编程指南,期待作者早日完成创作.
- Qt 编程指南 4 单行编辑控件
从 Qt 设计师界面可以看到常用的 Qt 文本编辑和浏览控件,包括四个: 其中单行编辑控件 QLineEdit 和 普通文本编辑控件 QPlainTextEdit 都是针对最普通的 C++ 字符串编辑 ...
- Qt 编程指南 3 信号和槽沟通
https://qtguide.ustclug.org/ 1 信号和槽 所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座.怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键, ...
- Qt 编程指南 1 从Hello World开始
1 简单的hello QT 注意项目和路径不要包含任何中文字符,特殊字符,空格. 只能有英文,数字,下划线,且不能数字开头. //helloqt.cpp #include <QtWidgets/ ...
- Qt 编程指南10 QImage Mat QPixmap转换
//示例 pushButtonOpenPicBig按钮clicked单击动作触发 void Qt_Window::on_pushButtonOpenPicBig_clicked() { strin ...
- Qt 编程指南 7 添加背景
. #include "QT_Text1.h" #include <QtWidgets/QApplication> #include <QBitmap> i ...
- Qt 编程指南 3_1 按钮弹窗手动和自动关联示例
触发的两种模式 connect() 和 on_控件ID_控件函数(参数) 两者优缺点对比: 虽然 Qt 有比较好用的自动关联大法,但自动关联不是万能的,尤其是涉及到多个窗体的时候,比如 A 窗体私有按 ...
- Qt 编程指南 4 按钮
1按钮类的控件 逐个解释一下各个用途:(1)按压按钮 QPushButton最基本的按钮,点击该按钮通常是通知程序进行一个操作,比如弹个窗.下一步.保存.退出等等,这是经常用到的,操作系统里的对话框里 ...
- Qt 编程指南 8 显示静态小图片和动态大图片
显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...
随机推荐
- R语言实战(四)—— 基本数据管理
一.基础操作 1.根据数据信息,创建数据框 > manager <- c(1,2,3,4,5) > date <- c("10/24/08","1 ...
- JS截取字符串substr 和 substring方法的区别
substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数 stringvar 必选项.要提取子字符串的字符串文字或 ...
- Spring Boot 初始化运行特定方法
Spring Boot提供了两种 “开机自启动” 的方式,ApplicationRunner和CommandLineRunner 这两种方式的目的是为了满足,在容器启动时like执行某些方法.我们可以 ...
- 将代码从 spark 1.x 移植到 spark 2.x
1. SparkSession sparkSession可以视为sqlContext和hiveContext以及StreamingContext的结合体,这些Context的API都可以通过spark ...
- 【Java】模拟Sping,实现其IOC和AOP核心(二)
接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个 ...
- Callable接口--有返回值的线程
Callable java5之前是没有返回值的,Java5新增了Callable接口获得线程的返回值,可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.Cal ...
- 去除git版本控制
命令:find . -name ".git" | xargs rm –Rf linux $ find . -type d -iname '__pycache__' -exec rm ...
- Keras 中 TimeDistributed 和 TimeDistributedDense 理解
From the offical code: class TimeDistributed(Wrapper): """This wrapper applies a laye ...
- 一个Web页面的问题分析
几个月之前我接到一个新的开发任务,要在一个旧的Web页面上面增添一些新的功能.在开发的过程中发现旧的代码中有很多常见的不合适的写法,结合这些问题,如何写出更好的,更规范的,更可维护的代码,就是这篇文章 ...
- Linux 操作系统下为网卡配置ip
Linux操作系统下为网卡配置ip by:授客 QQ:1033553122 1. Linux单一网卡设置多IP的配置方法 在Linux下网卡接口逻辑名被称为eth0,eth1,eth2,..... ...