Qt程序打包之QtIFW使用教程

1,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或者其它工具生成)。

2,环境配置

添加到Qt Creator帮助文档

打开 Qt Creator,选择【工具】–>【选项】–>【帮助】–>【文档】–>【添加】
选择Qt IFW安装目录doc下的ifw.qch文件。

4.5.0安装目录下没有qch文件,此步骤可以跳过。

配置Windows环境变量

Windows下使用binarycreator作为打包工具,必须把binarycreator工具所在的bin目录导入的环境变量Path中。

3,Qt IFW的使用

构建Example

直接Qt构建examples.pro可查看各个例子安装效果

制作安装包至少应包含config/packages/两个目录

4,离线安装

创建配置文件
<?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

5,验证测试安装包

双击生成安装包一路next即可,部分截图如下。

离线打包安装到此结束!

6,在线安装

生成基础安装包

binarycreator --online-only -c config/config.xml -p packages installer.exe

创建初版存储库

repogen  -p packages repository

安装基础安装包

7,此过程若使用Gitee做存储库可能会出现异常,详见异常问题汇总

创建新版本存储库

repogen --update-new-components -p packages_update3.2 repository

使用安装包中maintenancetool安装更新

异常问题汇总

异常1

使用Gitee做资源库时较大文件无法下载,提示协议未知;

暂无解决办法,需切换成其它资源库。

建议使用github存储库或者自建http服务。笔者使用python自带的httpserver进行测试。

github需要修改hosts或者梯子,请自行选择。

异常2

安装目录存在且包含安装程序,这就涉及到自动卸载旧版本或者覆盖安装问题。

8,总结

QtIFW比较灵活支持离线或在线安装程序,或两者兼而有之,具体取决于您的使用案例。支持资源库、样式表、窗口等的定制化操作。

实操内容已上传Github,感兴趣请移步,欢迎大佬批评指正。后续会持续更新完善

https://github.com/nealwang123/QtIFWOnline.git



链接:https://www.jianshu.com/p/8f24dec6327d
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值