Tree Name Example
树名称示例
Using components' package.xml files to define custom locations in the component tree.
使用组件的package.xml文件在组件树中定义自定义位置。
Tree Name illustrates how to specify custom locations for components in the component tree view and how that influences the installation and maintenance processes.
树名称说明了如何在组件树视图中为组件指定自定义位置,以及这如何影响安装和维护过程。
Configuring the Example Installer
配置示例安装程序
The installer configuration file, config.xml, in the config
directory specifies the text and default values used in the installer:
config目录中的安装程序配置文件config.xml指定了安装程序中使用的文本和默认值:
- The
<Name>
element sets the application name and adds it to the page name and introduction text. - <Name>元素设置应用程序名称并将其添加到页面名称和介绍文本中。
- The
<Version>
element sets the application version number. - <Version>元素设置应用程序版本号。
- The
<Title>
element sets the installer name and displays it on the title bar. - <Title>元素设置安装程序名称并将其显示在标题栏上。
- The
<Publisher>
element sets the publisher of the software (as shown in the Windows Control Panel, for example). - <Publisher>元素设置软件的发布者(例如,如Windows控制面板所示)。
- The
<StartMenuDir>
element sets the name of the default program group for the product in the Windows Start menu. - <StartMenuDir>元素在Windows“开始”菜单中设置产品的默认程序组的名称。
- The
<TargetDir>
element sets the default target directory location to be within theIfwExamples
directory in the home directory of the current user (because it uses the pre-existing variable,
@HomeDir@, as part of the value). For more information, see Predefined Variables. - <TargetDir>元素将默认目标目录位置设置为当前用户主目录中的IfwExamples目录内(因为它使用预先存在的变量@HomeDir@作为值的一部分)。有关详细信息,请参见预定义变量。
- The
<WizardShowPageList>
element is set tofalse
to hide the page list widget on the left side of the installer wizard window. - 将<WizardShowPageList>元素设置为false,以隐藏安装程序向导窗口左侧的页面列表widget。
<?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>
Creating the Example Package Information File
创建示例包信息文件
The installer package information file, package.xml, in the meta
directory specifies the components that are available for installation:
meta
目录中的安装程序包信息文件package.xml指定了可用于安装的组件:
- The
<DisplayName>
element sets the human-readable name of the component. - <DisplayName>元素设置组件的人类可读名称。
- The
<Description>
element sets the human-readable description of the component. - <Description>元素设置组件的人类可读描述。
- The
<Version>
element sets the version number of the component. - <Version>元素设置组件的版本号。
- The
<ReleaseDate>
element sets the date of release for this component version. - <ReleaseDate>元素设置此组件版本的发布日期。
- The
<TreeName>
element specifies the location of the component in the component tree. The element accepts an optionalmoveChildren
attribute with a boolean value. If the value is set totrue
, any child components of this component are also moved to the modified location. - <TreeName>元素指定组件在组件树中的位置。该元素接受具有布尔值的可选moveChildren属性。如果该值设置为true,则此组件的任何子组件也将移动到修改后的位置。
Note: Without this element the identifier of this component decides the location in the component tree.
注意:如果没有此元素,此组件的标识符将决定组件树中的位置。
In this example, the package.xml files for the components contain additional elements that specify the component tree locations. The following sections illustrate how the elements are used.
在此示例中,组件的package.xml文件包含指定组件树位置的其他元素。以下部分说明了如何使用这些元素。
Specifying Tree Name to Root Node
为根节点指定树名
We define a tree name ASub1ToRoot for component A subcomponent 1. Thus, this child component of A becomes a new root component. By default the children are not moved to the new location, so A sub-subcomponent1 becomes a new direct child of A.
我们为组件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>
Specifying Tree Name and Moving Children
指定树名和移动子节点
As above, we define a tree name BSub1ToRoot for component B subcomponent 1, but this time we set the moveChildren
attribute to true
. The component becomes a new root component and the child component B sub-subcomponent 1 of this component moves to the new location with the parent.
如上所述,我们为组件B subcomponent 1定义了一个树名BSub1ToRoot,但这次我们将moveChildren属性设置为true。该组件成为新的根组件,该组件的子组件B sub-subcomponent 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>
Specifying Tree Name to Sub Node
为子节点指定树名
We define a tree name A.subC for component C and set the moveChildren
attribute to true
. Thus, this originally root component is moved as a child component of A. The child components C subcomponent 1 and C subcomponent 2 move to the new location with the parent.
我们为组件C定义了一个树名A.subC,并将moveChildren属性设置为true。因此,这个原本的根组件作为A的子组件被移动。子组件C subcomponent 1和C subcomponent 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>
Specifying Tree Name to Existing Node
为现有节点指定树名
We define a tree name D for component E. Node D is already a part of an existing component identifier for D subcomponent 1 (D.sub1), but the packages directory does not contain a component for the identifier, so it is possible to declare a tree name D. The component E becomes a new root component and parent of D subcomponent 1. As the moveChildren
attribute is set to true
, the child component E subcomponent 2 is moved with the parent.
我们为组件E定义了一个树名D。节点D已经是D subcomponent 1(D.sub1)的现有组件标识符的一部分,但包目录不包含标识符的组件,因此可以声明树名称D。组件E成为新的根组件和D subcomponent 1的父组件。当moveChildren属性设置为true时,子组件E subcomponent 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>
Other Considerations
其他考虑
Multiple Tree Names in One Component Branch
一个组件分支中有多个树名
Components in a single branch (A, A.sub1, A.sub1.sub1, A.sub1.sub1.sub2 and so on) may each declare a separate tree name. The installer or maintenance tool calculates the new locations for components in an ascending order from leaf components to root components, so that A.sub1.sub1.sub2 is moved first and A last.
单个分支中的组件(A、A.sub1、A.sub1.sub1、A.sub1.sub1.sub2等)可以各自声明一个单独的树名。安装程序或维护工具按从叶组件到根组件的升序计算组件的新位置,以便首先移动A.sub1.sub1.sub2,最后移动A。
Tree Names of Installed and Remote Components
已安装和远程组件的树名称
For online installers, the repositories may declare updated tree names for components, so the following rules apply:
对于在线安装程序,存储库可能会声明组件的更新树名称,因此适用以下规则:
- The tree names for components become static after being installed. Therefore, if the user of the installer has installed component A with tree name ANewName1, and the repository is updated with a new version of component A that declares tree name ANewName2, the new location is only applied when the user updates the component locally with the maintenance tool.
- 组件的树名称在安装后变为静态。因此,如果安装程序的用户安装了树名为ANewName1的组件A,并且使用声明树名ANewName2的组件A的新版本更新了存储库,则只有当用户使用维护工具在本地更新组件时,才会应用新位置。
- The automatic tree names of children of components with tree name and
moveChildren
set totrue
are moved with the parent regardless if installed or not. Therefore, if the user has installed component A.sub1 but not component A, and A is updated in the repository with a new tree name, the A.sub1 uses also the new tree name in maintenance tool's component tree. - 树名和moveChildren设置为true的组件的子级的自动树名将与父级一起移动,无论是否安装。因此,如果用户安装了组件A.sub1,但没有安装组件A,并且A在存储库中用新的树名更新,则A.sub1也会在维护工具的组件树中使用新的树名称。
Tree Name and Name Conflicts
树名称和名称冲突
The tree names may conflict with existing component names or other tree names. Depending on whether the installer or maintenance tool is configured to allow unstable components with <AllowUnstableComponents>
configuration file element, the offending components are either registered as unstable components with their original name or not registered at all.
树名称可能与现有组件名称或其他树名称冲突。根据安装程序或维护工具是否配置为允许使用<AllowUnstableComponents>配置文件元素的不稳定组件,违规组件要么以其原始名称注册为不稳定组件要么根本没有注册。
Note: Components from remote repositories can never override already installed components in the tree view. If a conflicting remote component cannot be registered with the original name either in case a local component has reserved it with a tree name, the component is not registered.
注意:来自远程存储库的组件永远不能覆盖树视图中已安装的组件。如果冲突的远程组件无法用原始名称注册(如果本地组件已用树名称保留了它),则该组件不会注册。
Generating the Example Installer
生成示例安装程序
To create the example installer, switch to the example source directory on the command line and enter the following command:
要创建示例安装程序,请在命令行上切换到示例源代码目录,然后输入以下命令:
- On Windows:
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- On Linux or macOS:
../../bin/binarycreator -c config/config.xml -p packages installer
This creates the installer to the current directory.
这将创建当前目录的安装程序。
Files:
- 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. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. The Qt Company, Qt and their respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.