QT程序的安装包制作教程

news2024/11/14 15:07:44

在Windows平台上开发完qt c++桌面应用程序以后,需要制作一个安装包,方便生产和刻盘交货,本文记录相关流程。

目录

一、安装Qt Installer Framework 

二、准备可执行程序 

2.1 生成Release程序

2.2 完成依赖库拷贝

三、创建安装包程序


一、安装Qt Installer Framework 

Qt Installer Framework是Qt官方提供的一组工具和实用程序,用于创建安装程序,可以在所有受支持的桌面Qt平台上完成安装包制作,无需重写源代码。具体受支持平台包括:Linux,Windows和OS X。

下载链接:Index of /official_releases/qt-installer-framework 

打开以后选择一个较新的版本即可,本文选择的是4.8.0,如下图所示:

单击进入下载详情页面。由于本文是在windows平台上制作,因此选择exe程序进行下载,如下图所示:

下载完成后双击该安装包,按照提示默认安装即可完成(安装路径中不要出现中文或特殊符号)。本文将其安装在了下面的路径:

D:\toolplace\qt_installer_framework

二、准备可执行程序 

2.1 生成Release程序

先要在release模式下编译运行程序,生成release版本,也就是发布版本。在release文件下找到可执行文件exe,一般路径如下所示

E:\Qt_Project\build-faceEval-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\release\faceEval.exe

然后把这个exe文件单独拷贝到一个空的文件夹中,如下所示(路径中不要出现中文):

D:\project\faceEval.exe

2.2 完成依赖库拷贝

接下来使用Qt自带的打包工具windeployqt对应用程序进行打包,其本质就是把一些Qt的库或者依赖项添加进行来。

从电脑左下角的开始菜单打开Qt的命令行界面Qt 5.15.2 (MSVC 2019 64-bit),如下图所示:

输入命令如下:

windeployqt D:\project\faceEval.exe

这时候qt会自动将依赖的qt库文件导入到新建的文件夹下面。如果开发的程序还依赖其它第三方库(非qt),比如OpenCV,那么就把对应需要的相关dll文件或资源导入到新建的文件夹下面。

最后双击可执行程序验证下能否正常启动,运行是否正常。

三、创建安装包程序

Qt Installer Framework安装目录的examples文件夹下面有很多的安装程序实例,可以将其复制一份出来。本文使用的示例是D:\toolplace\qt_installer_framework\examples\startmenu。将整个的startmenu复制一份出来。

首先将第二步整理出来的文件全部复制到startmenu\packages\org.qtproject.ifw.example\data文件夹里,注意是和exe同一级目录的所有文件。

接下来修改配置文件,在startmenu/config目录下,有一个config.xml文件,使用文本编辑器打开,根据自己的需求进行修改,如下图所示:

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>智能识别程序</Name>
    <Version>1.0</Version>
    <Title>智能识别程序——安装向导</Title>
    <Publisher>微星技术开发有限公司</Publisher>
    <!-- Directory name is used in component.xml -->
    <StartMenuDir>智能识别程序</StartMenuDir>
    <TargetDir>@HomeDir@/det</TargetDir>
</Installer>

相关定义如下:

  •  < Name> 软件名称
  • < Version> 版本号
  • < Title> 安装程序窗口标题
  • < Publisher> 发布者名称
  • < StartMenuDir> 要生成的windows开始菜单目录
  • < TargetDir> 默认安装路径

接下来修改包信息文件,找到startmenu\packages\org.qtproject.ifw.example\meta下package.xml文件,使用文本编辑器打开,根据自己的需求进行修改,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>README.txt</DisplayName>
    <Description>A README.txt, accessible through a start menu entry.</Description>
    <Version>V1.0</Version>
    <ReleaseDate>2024-09-01</ReleaseDate>
    <Default>true</Default>
    <Script>installscript.qs</Script>
</Package>

相关说明如下:

  • < DisplayName> 显示的名称
  • < Description> 描述
  • < Version> 部件的版本号
  • < ReleaseDate> 发行日期
  • < Licenses> 许可信息名称以及许可文件名
  • <Default>默认是否选中协议
  • < Script> 脚本文件
  • < UserInterfaces> 额外的界面(如果需要的话,而且需要去installscript.qs中配置)

最后修改qs文件,找到startmenu\packages\org.qtproject.ifw.example\meta下installscript.qs文件,使用文本编辑器打开,根据自己的需求进行修改,如下所示:

function Component()
{
    // default constructor
}

Component.prototype.createOperations = function()
{
    // call default implementation to actually install README.txt!
    component.createOperations();

    if (systemInfo.productType === "windows") {
        component.addOperation("CreateShortcut", "@TargetDir@/faceEval.exe", "@StartMenuDir@/智能识别程序.lnk",
            "workingDirectory=@TargetDir@", "iconPath=%SystemRoot%/system32/SHELL32.dll",
            "iconId=2", "description=Open README file");

        component.addOperation("CreateShortcut", "@TargetDir@/faceEval.exe", "@DesktopDir@/智能识别程序.lnk");

    }
}

到这里准备工作就基本完成了。接下来添加环境变量,将Qt Installer Framework安装文件下的bin路径添加到系统环境变量中。

从电脑左下角的开始菜单打开Qt的命令行界面Qt 5.15.2 (MSVC 2019 64-bit),然后通过cd命令进入到startmenu目录,输入下面的命令完成制作:

binarycreator.exe -c config/config.xml -p packages install.exe -v

然后在startmenu目录下就会生成安装包了,如下图所示:

后面只需要把这个install.exe刻盘交给用户即可,用户双击这个安装包就能正常安装软件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024icpc江西:H.Convolution(二维前缀和,卷积核)

题目 做法 我们发现&#xff0c;K中的每个元素都乘了对应原矩阵中子矩阵&#xff08;n-k1&#xff09;* (m-l1)中的每个数。我们就直接前缀和求就好了。 #include<bits/stdc.h> #define int long long using namespace std;const int N1e310; int n,m,k,l; int a[N][N…

语言中的浮点数

浮点数相比定点数或者整数&#xff0c;为了处理小数点引入了指数&#xff0c;导致小数点的位置根据不同浮点数而不同&#xff0c;故名为Floating Point Number. 一般而言&#xff0c;IEEE754标准被大部分编程语言的浮点数使用&#xff0c;它节省了浮点数的保存空间。如不然&…

思维导图模板,看完这些步骤学会制作

思维导图模板&#xff0c;思维导图是一种非常有效的信息组织工具&#xff0c;它将复杂的信息以图形化的形式展现出来&#xff0c;便于记忆和理解。无论是用于项目管理、学习笔记整理还是头脑风暴会议记录&#xff0c;思维导图都能够帮助人们更好地梳理思路&#xff0c;提高工作…

在 ClickHouse 中进行机器学习数据建模

本文字数&#xff1a;17443&#xff1b;估计阅读时间&#xff1a;44 分钟 作者&#xff1a;Dale McDiarmid 本文在公众号【ClickHouseInc】首发 本文将探索 MLOps 的世界&#xff0c;探讨如何在 ClickHouse 中对数据进行建模和转换&#xff0c;使其成为高效的特征存储&#xff…

百收网AI发帖子怎么发?

百收网AI发帖子怎么发&#xff1f; 百家号APP怎么发内容&#xff1f;没有电脑怎么在百度发内容&#xff1f;#百家号 查看视频讲解&#xff1a;&#xff08;点击链接https://v.youku.com/v_show/id_XNjQyMjc4MjU3Ng.html&#xff1a;https://v.youku.com/v_show/id_XNjQyMjc4M…

Linux云计算 |【第三阶段】PROJECT1-DAY1

主要内容&#xff1a; 服务器硬件&#xff08;RAID磁盘阵列、IDRAC远程控制卡&#xff09;、部署LNMP动态网站&#xff08;部署LNMP平台、上线Wordpress代码、创建数据库、初始化Wordpress&#xff09; 一、服务器介绍 1、什么是服务器 服务器&#xff08;Server&#xff09…

C++入门(part 3)

前言 在前文我们讲解了C的诞生与历史&#xff0c;顺便讲解一些C的小语法&#xff0c;本文会继续讲解C的基础语法知识。 1.inline(内联函数) inline是C新加入的关键字,用inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用的地方将函数展开&#xff0c;这样每次…

数据中台 | 数据资源管理平台介绍

01 产品概述 数据资源的盘查、集成、存储、组织、共享等全方位管理能力&#xff0c;无论对于企业的数字化转型&#xff0c;还是对企业数据资产的开发、运营、交易及入表&#xff0c;都具有极为关键的作用。今天&#xff0c;小兵就来为大家介绍我们自研数据智能平台中的核心产品…

废品回收小程序搭建,回收市场的机遇

随着经济的快速发展&#xff0c;居民生活水平普遍提高&#xff0c;产生的各类废品也在不断增加&#xff0c;为废品回收市场提供了发展基础。当下&#xff0c;在大众环保意识增加下&#xff0c;废品回收行业也将成为一个具有广阔发展前景的朝阳行业&#xff01; 目前&#xff0…

C++vector类 (带你一篇文章搞定C++中的vector类)

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 数据结构习题_LaNzikinh篮子的博客-CSDN博客 初阶数据结构_LaNzikinh篮子的博客-CSDN博客 收入专栏&#xff1a;C_LaNzikinh篮子的博客-CSDN博客 其他专…

代码随想录27期|Python|Day54|​单调栈|​42. 接雨水|84. 柱状图中最大的矩形

42. 接雨水 根据常识可以归纳出&#xff0c;对于每一列所能够存住的水的高度 Height min(LeftMax, RightMax) - height 也就是&#xff0c;当前列的存水高度 左侧和右侧柱子的最大高度的较小值&#xff0c;减去当前列的柱子高度&#xff0c;所得到的差值。 可以验证第4列&…

spring常用注解(10)@Order

一、 1、作用 加Order()注解&#xff0c;在注解中加入数字&#xff0c;数字越小&#xff0c;优先级越高&#xff0c;最先执行。 2、使用方法 &#xff08;1&#xff09;自定义顺序 Component Order(1) public class XxxFilter extends OncePerRequestFilter{}Component Or…

什么品牌的宠物空气净化器性价比最高?352/希喂/霍尼韦尔/有哈/IAM实测对比

我开着一家猫咪咖啡馆&#xff0c;我们店貌美小猫可没少给我带来回头客~先给大家看看我的招财猫们 开了三年了&#xff0c;也是前不久店里才开始有点盈利&#xff0c;开始那段时间没少收到投诉&#xff0c;差点就干不下去了。店里养着的猫多&#xff0c;平时鱼油、冻干也没稍微…

foc入门

FOC(Field Oriented Control)磁场定向控制 foc,磁场定向控制&#xff0c;通过控制无刷电机三相电流&#xff0c;来实现对无刷电机的角度扭矩的控制。 首先先要理解无刷电机的原理&#xff0c;我们以三槽两极内转子电机进行讲解&#xff0c; 相较于有刷电机&#xff0c;无刷电…

乱弹篇(47)渔友絮语

中秋节连着国庆节长假很快就要来临&#xff0c;这对于久未远行旅游的人来说&#xff0c;真是拉满的幸福日子&#xff0c;因此本“人民体验官”特意推广人民日报官方微博文化产品《收藏&#xff01;中秋假期博物馆看展攻略》。 截图&#xff1a;来源“人民体验官”推广平台 人民…

Linux编译内核选项说明

内核功能选择 编译内核时出现的提示信息是在描述内核配置界面中的导航和操作方式。具体解释如下&#xff1a; Arrow keys navigate the menu: 使用箭头键可以在菜单中上下左右移动。 <Enter> selects submenus ---> (or empty submenus ----): 按下回车键可以选择一个…

【白话树】之 树的基本知识、存储结构和二叉树转换

快速导航 一、树的基础概念1. 树的定义&#xff1a;2. 树的特点:3. 树的常用术语&#xff1a;4. 树的简单分类&#xff1a; 二、树的存储结构1.顺序存储1) 双亲表示法2) 孩子表示法3) 双亲孩子表示法 2.链式存储1) 孩子链表表示法2) 孩子兄弟表示法 三、树、森林和二叉树的转换…

根据NVeloDocx Word模板引擎生成Word(五)

前面几篇基本上介绍完了NVeloDocx的基础用法&#xff0c;绝大部分的需求其实都是这些基础的东西&#xff0c;本篇将介绍2个不常用但是实际的业务场景&#xff1a; 1、图片列表输出&#xff1b; 比如在E6开发平台生成的客户端中&#xff0c;图片列表往往是这样显示的&#xff…

【数据结构】第八节:链式二叉树

个人主页&#xff1a; NiKo 数据结构专栏&#xff1a; 数据结构与算法 源码获取&#xff1a;Gitee——数据结构 一、二叉树的链式结构 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left; // 左子树根节点struct BinaryT…

2024年沈阳都市圈电竞大赛 暨TGA腾讯电竞运动会辽宁省选拔赛盛大开赛

去年&#xff0c;由沈阳市体育局主办的“2023年沈阳都市圈首届电竞大赛暨TGA浑南之夏辽宁省英雄联盟选拔赛”成功举办。通过搭建赛事平台&#xff0c;营造了沈阳都市圈电竞氛围&#xff0c;促进了电子竞技全业态发展。 今年&#xff0c;“2024年沈阳都市圈电竞大赛暨TGA腾讯电…