网站首页 > 编程文章 正文
QtIFW 简介
Qt IFW(Qt Installer Framework 的简称 ),是由 Qt 官方提供的安装程序制作框架。进入Qt IFW的官方下载页,选择一个合适版本,这里选择版本号为4.5.0的windows版本进行安装。
官方下载地址:https://download.qt.io/official_releases/qt-installer-framework/
本文会在Windows上基于Qt IFW进行程序安装包程序制作,包括常用的离线安装包和在线更新包的生成和验证都会详细介绍。使用Qt IFW制作安装包默认您已经准备好了完整的程序包(windeployqt或者其它工具生成)。
环境配置
添加到Qt Creator帮助文档
打开 Qt Creator,选择【工具】–>【选项】–>【帮助】–>【文档】–>【添加】
选择Qt IFW安装目录doc下的ifw.qch文件。
4.5.0安装目录下没有qch文件,此步骤可以跳过。
配置Windows环境变量
Windows下使用binarycreator作为打包工具,必须把binarycreator工具所在的bin目录导入的环境变量Path中。
Qt IFW的使用
构建Example
直接Qt构建examples.pro可查看各个例子安装效果
制作安装包至少应包含config/、packages/两个目录
离线安装
创建配置文件
<?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>UDS_Updata</Name> <Version>1.0.0</Version> <Title>UDS_Updata Installer</Title> <Publisher>nealwang</Publisher> <StartMenuDir>UDS_Updata</StartMenuDir> <TargetDir>@ApplicationsDir@/UDS_Updata</TargetDir> </Installer>
配置文件指定如下信息:
< Title > 标题栏上安装程序名称
< Name > 显示在安装页面上应用程序的名称
< Version > 应用程序的版本号
< Publisher > 软件发布者
< StartMenuDir > 添加到开始菜单默认程序组名称
< TargetDir > 应用程序的安装目录
创建包信息文件
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>UDS_Updata</DisplayName> <Description>This is a demo for Qt IFW </Description> <Version>1.0.0-1</Version> <ReleaseDate>2023-10-19</ReleaseDate> <Default>true</Default> <Script>installscript.qs</Script> <Licenses> <License name="Public License Agreement" file="license.txt" /> </Licenses> </Package>
各个元素含义如下:
< DisplayName > 指定组件的名称
< Description > 显示选中组件的描述信息
< Version > 组件的版本号信息,可用作后期版本更新
< ReleaseDate > 组件发布的日期
< Default > 安装过程中组件是否默认选中,true表示默认选中,false默认补选中。
< Script > JavaScript文件名,执行一些个性化的安装操作
< Licenses > 添加许可文件
自定义安装
通过在installscript.qs文件中添加如下内容,分别添加应用程序到开始菜单快捷方式和桌面快捷方式。
function Component() { gui.pageWidgetByObjectName("LicenseAgreementPage").entered.connect(changeLicenseLabels); } changeLicenseLabels = function() { page = gui.pageWidgetByObjectName("LicenseAgreementPage");page.AcceptLicenseLabel.setText("Yes I do!");page.RejectLicenseLabel.setText("No I don't!"); } Component.prototype.createOperations = function() { // 调用默认实现 component.createOperations(); if (systemInfo.productType === "windows") { // 添加桌面快捷方式 component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@DesktopDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@"); //添加开始菜单快捷方式 component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@StartMenuDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@"); } }
准备打包文件
将提前准备好的程序(*.exe、*.dll等文件)
开始打包
执行如下命令
binarycreator -c config\config.xml -p packages UDS_updateInstaller -v
验证测试安装包
双击生成安装包一路next即可,部分截图如下。
在线安装
生成基础安装包
binarycreator --online-only -c config/config.xml -p packages installer.exe
创建初版存储库
repogen -p packages repository
安装基础安装包
此过程若使用Gitee做存储库可能会出现异常,详见异常问题汇总
创建新版本存储库
repogen --update-new-components -p packages_update3.2 repository
使用安装包中maintenancetool安装更新
异常问题汇总
异常1
使用Gitee做资源库时较大文件无法下载,提示协议未知;
暂无解决办法,需切换成其它资源库。
建议使用github存储库或者自建http服务。笔者使用python自带的httpserver进行测试。
github需要修改hosts或者梯子,请自行选择。
异常2
安装目录存在且包含安装程序,这就涉及到自动卸载旧版本或者覆盖安装问题。
总结
QtIFW比较灵活支持离线或在线安装程序,或两者兼而有之,具体取决于您的使用案例。支持资源库、样式表、窗口等的定制化操作。
实操内容已上传Github,感兴趣请移步,欢迎大佬批评指正。后续会持续更新完善
https://github.com/nealwang123/QtIFWOnline.git
- 上一篇: 声卡+EQ插件实现家庭影院低音炮低频管理
- 下一篇: Qt之QFlags详解(qt qlog)
猜你喜欢
- 2024-10-14 「Qt入门第31篇」 网络(一)Qt网络编程简介
- 2024-10-14 qt 做手机android的串口通讯 qt下串口通信
- 2024-10-14 Qt 读写txt文本文件(qt读入文件)
- 2024-10-14 Qt 信号槽连接不成功问题原因汇总
- 2024-10-14 QML 性能优化建议(一)(qml例程)
- 2024-10-14 C++ QT中文件的读写操作(UI界面)(qt怎么读取文件内容)
- 2024-10-14 Qt 中的智能指针(qt 函数指针)
- 2024-10-14 Qt如何读取和写入配置文件的数据(qt 读写配置文件)
- 2024-10-14 Qt pro文件中的常用宏说明(qt pro 自定义宏)
- 2024-10-14 Qt应用程序主窗口:拖放操作与打印文档
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)