树形名称示例
使用组件的 package.xml 文件来定义组件树中的自定义位置。
树形名称 展示了如何指定组件树视图中组件的自定义位置以及这对安装和维护过程的影响。
配置示例安装程序
位于 config
目录下的安装程序配置文件 config.xml 指定安装程序中的文本和默认值
<Name>
元素设置应用程序名称并将其添加到页面名称和简介文本中。<Version>
元素设置应用程序版本号。<Title>
元素设置安装程序名称并在标题栏显示它。<Publisher>
元素设置软件的发布者(例如,在 Windows 控制面板中显示的发布者)。<StartMenuDir>
元素设置 Windows 开始 菜单中产品的默认程序组名称。<TargetDir>
元素设置默认目标目录位置在当前用户的家用目录下的IfwExamples
目录中(因为它使用预定义变量,
@HomeDir@, 作为值的一部分)。有关更多信息,请参阅 预定义变量。
<WizardShowPageList>
元素被设置为false
以隐藏安装程序向导窗口左侧的页面列表小部件。
<?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>Tree Name Example</Name> <Version>1.0.0</Version> <Title>Tree Name Example</Title> <Publisher>The Qt Company</Publisher> <StartMenuDir>Qt IFW Examples</StartMenuDir> <TargetDir>@HomeDir@/IfwExamples/treename</TargetDir> <WizardShowPageList>false</WizardShowPageList> </Installer>
创建示例包信息文件
位于 meta
目录下的安装程序包信息文件 package.xml 指定可安装的组件
<DisplayName>
元素设置组件的人读名称。<Description>
元素设置组件的人读描述。<Version>
元素设置组件的版本号。<ReleaseDate>
元素设置此组件版本发布日期。
<TreeName>
元素指定组件在组件树中的位置。此元素接受一个可选的moveChildren
属性,其值为布尔值。如果该值设置为true
,则此组件的任何子组件也将移动到修改后的位置。注意: 如果没有此元素,则此组件的标识符决定在组件树中的位置。
在此示例中,组件的 package.xml 文件包含额外的元素,用于指定组件树位置。以下部分说明了如何使用这些元素。
指定根节点中的树名称
为组件 A subcomponent 1 定义一个树名称 ASub1ToRoot。因此,此 A 的子组件成为一个新的根组件。默认情况下,子组件不会移动到新位置,所以 A sub-subcomponent1 成为 A 的新直接子组件。
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>A subcomponent 1 (moved to root)</DisplayName> <Description>Subcomponent of component A</Description> <Version>1.0.0-1</Version> <ReleaseDate>2021-01-01</ReleaseDate> <TreeName>ASub1ToRoot</TreeName> </Package>
指定树名称并移动子组件
如上所示,我们为组件 B子组件1 定义了一个树名 BSub1ToRoot,但这次我们将 moveChildren
属性设置为 true
。该组件成为新的根组件,并与其子组件 B子子组件1 一起移动到新位置。
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>B subcomponent 1 (moved to root with children)</DisplayName> <Description>Subcomponent of component B</Description> <Version>1.0.0-1</Version> <ReleaseDate>2021-01-01</ReleaseDate> <TreeName moveChildren="true">BSub1ToRoot</TreeName> </Package>
指定树名到子节点
我们为组件 C 定义了一个树名 A.subC 并将 moveChildren
属性设置为 true
。因此,原本是根组件的它现在成为 A 的子组件。子组件 C子组件1 和 C子组件2 会随着父组件移动到新位置。
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>C (moved to sub node with children)</DisplayName> <Description>Example component C</Description> <Version>1.0.0-1</Version> <ReleaseDate>2021-01-01</ReleaseDate> <TreeName moveChildren="true">A.subC</TreeName> </Package>
指定树名到现有节点
我们为组件 E 定义了一个树名 D。节点 D 已是 D子组件1 (D.sub1) 现有的组件标识的一部分,但包目录不包含此标识的组件,因此可以声明树名 D。组件 E 成为新的根组件和 D子组件1 的父组件。由于将 moveChildren
属性设置为 true
,子组件 E子组件2 也与父组件一起移动。
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>E (moved to free existing node with children)</DisplayName> <Description>Example component E</Description> <Version>1.0.0-1</Version> <ReleaseDate>2021-01-01</ReleaseDate> <TreeName moveChildren="true">D</TreeName> </Package>
其他注意事项
单个组件分支中的一个树名
单个分支(A、A.sub1、A.sub1.sub1、A.sub1.sub1.sub2 等)中的组件可以分别声明不同的树名。安装程序或维护工具会根据从叶组件到根组件的顺序递增计算组件的新位置,因此首先移动 A.sub1.sub2,最后移动 A。
已安装和远程组件的树名
对于在线安装程序,存储库可能声明了组件的更新树名,因此以下规则适用
- 组件的树名在安装后变为静态。因此,如果安装程序的用户已使用树名 ANewName1 安装了组件 A,而存储库用新的组件 A 版本更新了,并声明了树名 ANewName2,则只有在用户使用维护工具本地更新组件时,新位置才会应用。
- 具有树名且
moveChildren
设置为true
的组件的子组件的自动树名无论是否已安装,都会随父组件一起移动。因此,如果用户已安装了组件 A.sub1 但未安装组件 A,并且 A 在存储库中更新了新的树名,则 A.sub1 也将在维护工具的组件树中使用新的树名。
树名和名称冲突
树名可能与现有的组件名称或其他树名冲突。根据安装程序或维护工具是否配置了 <AllowUnstableComponents>
配置文件元素以允许不稳定的组件,违规的组件要么作为具有原始名称的不稳定组件注册,要么根本不注册。
注意:远程存储库中的组件永远不能覆盖树视图中的已安装组件。如果冲突的远程组件在与本地组件使用树名冲突的情况下无法使用原始名称注册,则该组件不会注册。
生成示例安装程序
要创建示例安装程序,请在命令行上切换到示例源目录,并输入以下命令
- 在Windows上
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- 在Linux或macOS上
../../bin/binarycreator -c config/config.xml -p packages installer
这将在当前目录中创建安装程序。
文件
- treename/config/config.xml
- treename/packages/A.sub1.sub1/data/Asub1sub1.txt
- treename/packages/A.sub1.sub1/meta/package.xml
- treename/packages/A.sub1/data/Asub1.txt
- treename/packages/A.sub1/meta/package.xml
- treename/packages/A/data/A.txt
- treename/packages/A/meta/package.xml
- treename/packages/B.sub1.sub1/data/Bsub1sub1.txt
- treename/packages/B.sub1.sub1/meta/package.xml
- treename/packages/B.sub1/data/Bsub1.txt
- treename/packages/B.sub1/meta/package.xml
- treename/packages/B/data/B.txt
- treename/packages/B/meta/package.xml
- treename/packages/C.sub1/data/Csub1.txt
- treename/packages/C.sub1/meta/package.xml
- treename/packages/C.sub2/data/Csub2.txt
- treename/packages/C.sub2/meta/package.xml
- treename/packages/C/data/C.txt
- treename/packages/C/meta/package.xml
- treename/packages/D.sub1/data/Dsub1.txt
- treename/packages/D.sub1/meta/package.xml
- treename/packages/E.sub2/data/Esub2.txt
- treename/packages/E.sub2/meta/package.xml
- treename/packages/E/data/E.txt
- treename/packages/E/meta/package.xml
- treename/treename.pro
©2021 The Qt Company Ltd. 增加的文档贡献归其各自所有者所有。提供的文档是根据自由软件基金会发布的GNU自由文档许可证第1.3版的条款许可的。Qt公司、Qt及其相应标志是芬兰以及/或世界其他地区的Qt公司有限责任公司的商标。所有其他商标均为其各自所有者的财产。