定制安装程序

您可以通过以下方式使用脚本来自定义安装程序:

  • 添加由脚本准备并由安装程序执行的 Qt 安装程序框架 操作
  • 添加您在 package.xml 文件中指定的新页面,并将它们放置在 packages 目录中。
  • 通过将自定义用户界面元素插入其中作为单个小部件来修改现有页面。
  • 添加语言变体。

您可以使用 组件脚本控制脚本 来自定义安装程序。组件脚本通过在组件的 package.xml 文件的 Script 元素中指定它来与特定组件关联。脚本在获取组件的元数据时加载。有关组件脚本的信息,请参阅 组件脚本

控制脚本通过在安装程序的 config.xml 文件的 ControlScript 元素中指定它来与整个安装程序关联。控制脚本可以是安装程序的资源之一,也可以通过命令行传递。它们可以用于修改在组件加载之前向用户展示的安装程序页面。此外,您还可以使用它们来修改卸载程序中的页面。有关更多信息,请参阅 控制器脚本

有关组件和控制脚本中可用的全局 JavaScript 对象的更多信息,请参阅 脚本 API

添加操作

您可以使用组件脚本来在安装过程中执行 Qt 安装程序框架操作。通常,操作通过移动、复制或修补文件来操作文件。使用 QInstaller::Component::addOperationQInstaller::Component::addElevatedOperation 函数添加操作。有关更多信息,请参阅 向组件添加操作

此外,您可以通过从 KDUpdater::UpdateOperation 派生来实现方法,以在安装程序中注册自定义安装操作。有关更多信息,请参阅 注册自定义操作

有关可用操作的摘要,请参阅 操作

添加页面

组件可以包含一个或多个用户界面文件,这些文件由组件或控制脚本放置到安装程序中。安装程序自动加载 package.xml 文件的 UserInterfaces 元素中列出的所有用户界面文件。

使用组件脚本添加页面

要向安装程序添加新页面,请使用 installer::addWizardPage() 方法并指定新页面的位置。例如,以下代码在“准备安装”页面之前添加为一个 MyPage 的实例

installer.addWizardPage( component, "MyPage", QInstaller.ReadyForInstallation );

您可以使用组件脚本通过在带有小部件类名的 component::userInterface() 方法中调用它来访问加载的窗口小部件,如下面的代码片段所示

component.userInterface( "MyPage" ).checkbox.checked = true;

您还可以为添加的页面设置回调函数。要访问它,请使用UI文件中设置的名称(例如,"MyPage")。然后创建Dynamic${ObjectName}Callback函数(例如,DynamicMyPageCallback

Component.prototype.DynamicMyPageCallback = function()
{
    var page = gui.pageWidgetByObjectName("DynamicMyPage");
    page.myButton.click,
    page.myWidget.subWidget.setText("hello")
}

您可以使用UI文件中设置的名称访问小部件。例如,myButtonmyWidget是上面的代码中的小部件名称。

添加小部件

您可以使用组件或控件脚本将自定义用户界面元素作为单独的小部件插入到安装程序中(例如复选框)。

要插入单独的小部件,请使用installer::addWizardPageItem方法。例如,以下代码片段在脚本内部将MyWidget的实例添加到组件选择页面

installer.addWizardPageItem( component, "MyWidget", QInstaller.ComponentSelection );

与安装程序功能交互

您可以使用控件脚本在测试中自动执行安装程序功能,例如。以下代码示例说明了如何自动点击目标目录选择页面上的下一步按钮

Controller.prototype.TargetDirectoryPageCallback = function()
{
    gui.clickButton(buttons.NextButton);
}

翻译页面

安装程序使用Qt翻译系统来支持将可读输出生成多种语言。要提供包含在组件脚本和用户界面中的字符串的本地化版本,请创建安装系统同时加载的QTranslator文件。安装程序将加载与当前系统区域设置匹配的翻译文件。例如,如果系统区域设置是德语,则加载de.qm文件。此外,如果找到,将显示本地化的license_de.txt而不是默认的license.txt

需要将翻译添加到package.xml文件才能激活组件

<Translations>
    <Translation>de.qm</Translation>
</Translations>

在脚本中使用qsTranslate()函数进行字面文字。此外,您还可以在脚本中添加Component.prototype.retranslateUi方法。当安装程序语言改变且翻译文件被加载时,将调用此方法。

注意:翻译系统也可以用于定制UI。例如,使用一个en.ts文件用自定义的英文版本替换安装程序中的任何文本。

配置和覆盖默认翻译

安装程序已经被本地化为多种语言。系统语言用于定义加载的语言。如果您想定义安装程序的所使用语言,请使用<Translations>元素在config.xml中定义语言。例如,仅使用德语翻译

<Translations>
    <Translation>ifw_de</Translation>
    <Translation>qt_de</Translation>
</Translations>

默认翻译也可以被覆盖。编写您自己的翻译文件并将其添加到自定义资源:/translations_new。您可以使用binarycreator选项-r将此自定义资源添加到安装程序。有关更多信息,请参阅binarycreator参数摘要

如果翻译的语言不是Qt安装程序框架中现有翻译的一部分,您还需要将Qt基翻译为该语言包含在资源文件中。为此,您需要从QT_INSTALL_TRANSLATIONS的定位点指向您的语言的qtbase_*.qm,并在资源文件中进行别名。

例如,对于捷克语翻译,自定义的translations_new.qrc应如下所示

<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/translations_new">
    <file>ifw_cs.qm</file>
    <file alias="qt_cs.qm">%QT_INSTALL_TRANSLATIONS%/qtbase_cs.qm</file>
</qresource>
</RCC>

替换 QT_INSTALL_TRANSLATIONS 的路径可以从您的 Qt 安装程序的 qmake -query 输出中检索。

©2021 The Qt 公司 Ltd。本文档中的文档贡献属于其各自的版权所有者。本文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 公司、Qt 以及其相应的标志是芬兰和/或其他国家的 The Qt 公司 Ltd 的商标。所有其他商标都是其各自所有者的财产。