Qt QML/Quick程序部署
环境
- win10 x64
- Qt 6.10.1
自动拷贝依赖文件
使用完整的windeploy.exe路径执行:例如在项目根目录下执行:
D:\Qt\6.10.1\mingw_64\bin\windeployqt.exe --release --no-translations .\build\Desktop_Qt_6_10_1_MinGW_64_bit-Release\appSerialPortAssist.exe
完成后Desktop_Qt_6_10_1_MinGW_64_bit-Release目录下会自动加入所依赖的dll文件。
注意:这里的--release代表可执行文件是在release模式下生成的,需要确保此点才能正确运行!
也可切换为--debug那么后面的exe对应就是debug模式下生成的。
生成安装部署程序
- 前提是Qt安装时已经勾选安装了Installer Framework,如果安装了,那么可以在Qt安装目录下找到:
xxx\Qt\Tools\QtInstallerFramework。 - 将
D:\Qt\Tools\QtInstallerFramework\4.10\bin目录加入到环境变量PATH中。(这里的目录只是示例,实际版本以实际目录为准) - 项目根目录下新建
installer目录,并将D:\Qt\Tools\QtInstallerFramework\4.10\examples\startmenu目录下的config和packages两个目录拷贝到新建的installer目录下。 - 将
Desktop_Qt_6_10_1_MinGW_64_bit-Release目录下的所有文件(可不要一些临时文件、cmake文件等,以及以小数点开头的文件夹)拷贝到installer\packages\org.qtproject.ifw.example\data目录下 - 在项目根目录下打开
Windows PowerShell - 按需修改
installer\packages\org.qtproject.ifw.example\meta\package.xml文件的DisplayName标签和Description标签。 - 按需修改
installer\config\config.xml文件中的Name标签和Title标签。 - 执行:
binarycreator.exe --offline-only -c .\installer\config\config.xml -p .\installer\packages\ XXX.exe -v
详细设计可参考官方




以下内容为AI生成
你想知道在 Qt 的安装框架(Qt Installer Framework,简称 QIF)中如何添加多个安装包(package),核心是通过配置 packages 目录结构和 package.xml 文件来定义多个独立的安装组件,让用户可以选择安装不同的功能模块。
实现思路
Qt Installer Framework 中,每个 package 对应一个独立的安装组件(比如“主程序”“插件”“示例”),需要按固定目录结构组织,每个 package 都有自己的 package.xml 配置文件,最终通过 config.xml 统一管理所有 package。
一、基础目录结构
首先按以下结构创建项目(这是多 package 的核心前提):
MyInstaller/
├── config # 全局配置目录
│ └── config.xml # 安装器全局配置
├── packages # 所有package存放目录
│ ├── com.mycompany.app.main # 第一个package:主程序
│ │ ├── data # 该package的安装文件(如exe、dll)
│ │ └── meta # 该package的元配置
│ │ └── package.xml
│ ├── com.mycompany.app.plugin # 第二个package:插件
│ │ ├── data
│ │ └── meta
│ │ └── package.xml
│ └── com.mycompany.app.doc # 第三个package:文档
│ ├── data
│ └── meta
│ └── package.xml
└── installerbase.exe # QIF提供的安装器基础程序(可选)
注意:package 名称建议用「反向域名」格式(如
com.mycompany.app.main),避免命名冲突。
二、配置每个 Package(package.xml)
每个 package 的 meta/package.xml 定义该组件的名称、描述、依赖、是否可选等属性,以下是 3 个示例:
1. 主程序 package(com.mycompany.app.main/meta/package.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>主程序</DisplayName> <!-- 安装界面显示的名称 -->
<Description>核心应用程序,必须安装</Description>
<Version>1.0.0</Version> <!-- 版本号 -->
<ReleaseDate>2026-01-12</ReleaseDate>
<Name>com.mycompany.app.main</Name> <!-- 唯一标识,和目录名一致 -->
<Script>installscript.qs</Script> <!-- 可选:安装脚本(如自定义逻辑) -->
<Default>true</Default> <!-- 默认勾选 -->
<Required>true</Required> <!-- 必装组件(用户无法取消) -->
<SortingPriority>100</SortingPriority> <!-- 安装界面显示优先级(数值大在前) -->
</Package>
2. 插件 package(com.mycompany.app.plugin/meta/package.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>扩展插件</DisplayName>
<Description>额外功能插件,可选安装</Description>
<Version>1.0.0</Version>
<ReleaseDate>2026-01-12</ReleaseDate>
<Name>com.mycompany.app.plugin</Name>
<Default>false</Default> <!-- 默认不勾选 -->
<Required>false</Required> <!-- 可选组件 -->
<Dependencies>com.mycompany.app.main</Dependencies> <!-- 依赖主程序 -->
<SortingPriority>90</SortingPriority>
</Package>
3. 文档 package(com.mycompany.app.doc/meta/package.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>使用文档</DisplayName>
<Description>用户手册和API文档</Description>
<Version>1.0.0</Version>
<ReleaseDate>2026-01-12</ReleaseDate>
<Name>com.mycompany.app.doc</Name>
<Default>false</Default>
<Required>false</Required>
<SortingPriority>80</SortingPriority>
</Package>
三、配置全局安装器(config.xml)
在 config/config.xml 中声明所有 package,并配置安装器的全局属性:
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>My Qt Application</Name> <!-- 安装器名称 -->
<Version>1.0.0</Version>
<Title>My Qt App 安装程序</Title> <!-- 安装界面标题 -->
<Publisher>My Company</Publisher> <!-- 发布者 -->
<StartMenuDir>My Qt App</StartMenuDir> <!-- 开始菜单目录 -->
<TargetDir>@HomeDir@/MyQtApp</TargetDir> <!-- 默认安装路径 -->
<!-- 声明所有要包含的package -->
<Package>com.mycompany.app.main</Package>
<Package>com.mycompany.app.plugin</Package>
<Package>com.mycompany.app.doc</Package>
</Installer>
四、填充每个 Package 的数据文件
将对应文件放入每个 package 的 data 目录:
com.mycompany.app.main/data:放入主程序 exe、Qt 依赖库等核心文件;com.mycompany.app.plugin/data:放入插件 dll/so 文件;com.mycompany.app.doc/data:放入 PDF 文档、README 等。
五、生成安装程序
使用 QIF 提供的 binarycreator 工具打包(需配置 QIF 环境变量):
# Windows 命令
binarycreator.exe -c config/config.xml -p packages MyInstaller.exe
# Linux/macOS 命令
binarycreator -c config/config.xml -p packages MyInstaller.run
前置条件:确保 Qt Installer Framework 已安装(Qt 维护工具中勾选「Qt Installer Framework」组件),且
binarycreator所在路径(如Qt/Tools/QtInstallerFramework/4.5/bin)已加入系统环境变量。
关键配置解释
-
Dependencies(依赖):
- 如插件 package 依赖主程序,用户安装插件时会自动勾选主程序;
- 支持多个依赖,用逗号分隔:
<Dependencies>pkg1,pkg2</Dependencies>。
-
Required/Default:
Required="true":组件必装,安装界面无法取消勾选;Default="true":组件可选,但默认勾选。
-
SortingPriority:
- 数值越大,组件在安装界面的「选择组件」步骤中显示越靠前;
- 主程序建议设为最高(如 100),次要组件依次降低。
进阶技巧
-
分组显示组件:
如果 package 数量多,可通过<Group>标签分组:<!-- 在 config.xml 中添加 --> <Groups> <Group> <Name>核心组件</Name> <Packages> <Package>com.mycompany.app.main</Package> </Packages> </Group> <Group> <Name>可选组件</Name> <Packages> <Package>com.mycompany.app.plugin</Package> <Package>com.mycompany.app.doc</Package> </Packages> </Group> </Groups> -
自定义安装逻辑:
每个 package 可添加installscript.qs脚本,实现自定义操作(如创建快捷方式、修改注册表):// com.mycompany.app.main/meta/installscript.qs function Component() { // 安装完成后创建桌面快捷方式 Component.prototype.createOperations = function() { component.createOperations(); if (systemInfo.productType === "windows") { addDesktopShortcut("MyQtApp.exe"); } }; }
总结
- 多 package 核心是按「反向域名」格式创建独立目录,每个目录包含
data(安装文件)和meta/package.xml(组件配置); config.xml全局声明所有 package,可通过Groups分组、Dependencies配置依赖;- 最终用
binarycreator工具打包,生成包含多个可选组件的安装程序。
关键点:每个 package 的 Name 必须和目录名一致,Required/Default 控制组件是否必装/默认勾选,Dependencies 确保组件间的依赖关系正确。

浙公网安备 33010602011771号