【Qt】QtIFW 安装包制作总结 -QtIFW 安装脚本与语法



一、引言

​ 对于每个安装程序,可以指定与安装程序的UI或功能的某些部分交互的控制脚本。控制脚本可以向安装向导添加或删除页面、更改现有页面、执行额外的检查,并通过模拟用户单击与UI交互。例如,允许无人值守的安装。

​ 注意:脚本格式必须与QJSEngine兼容。

​ 本节描述为实现这样的控制脚本而调用的函数。同时还概述安装程序页面和每个页面上可用的小部件,如按钮、单选按钮和行编辑。

二、编写控制脚本

​ 一个脚本至少需要包含一个构造函数,如下:

  function Controller()
  {
  }

​ 下面例子展示了一个高级的脚本,它使用gui JavaScript全局对象方法在介绍页面上设置新的页面标题和欢迎信息,并自动单击目标目录页面上的Next按钮:

  function Controller()
  {
  }

  Controller.prototype.IntroductionPageCallback = function()
  {
      var widget = gui.currentPageWidget(); // 得到当前的页面向导
      if (widget != null) {
          widget.title = "New title."; // 设置页面的标题
          widget.MessageLabel.setText("New Message."); // 设置欢迎显示的文本
      }
  }

  Controller.prototype.TargetDirectoryPageCallback = function()
  {
      gui.clickButton(buttons.NextButton); // 自动单击“Next”按钮
  }

下表总结了可以在控制器和组件脚本中使用的全局JavaScript对象。

序号JavaScript对象描述
1QDesktopServices提供常用桌面环境的访问方法
2QFileDialog提供一个对话框,允许用户选择文件或目录
3QInstaller提供从Qt脚本访问安装程序状态和页面
4QMessageBox提供一个模态对话框,用于通知用户或向用户询问问题并接收答案
5buttons提供可在安装程序页面上使用的按钮
6component表示Qt脚本所属的当前组件
7console提供用于记录和调试的方法
8gui启用与安装程序UI的交互
9installer提供访问Qt安装程序框架的核心功能
10print提供与QtScript的兼容性
11systeminfo提供操作系统的信息

QInstaller JavaScript对象提供了对以下预定义安装程序页面的访问:

  • Introduction----------------------简介页面
  • TargetDirectory--------------------安装文件夹选择页面
  • ComponentSelection----------------组件选择页面
  • LicenseCheck ----------------------License选择页面
  • StartMenuSelection-----------------开始菜单快捷方式选择页面
  • ReadyForInstallation--------------准备安装提示页面
  • PerformInstallation---------------执行安装页面
  • InstallationFinished--------------安装完成提示页面
三、各个安装程序页面的交互

​ 本节内容将描述可以实现的与安装程序页面和每个页面上可用的小部件交互的功能。

(3-1)Introduction页面

​ 通过实现controller .prototype. introtionpagecallback()函数来与介绍页面上的小部件交互。

​ 该向导中有两个按钮:

  • NextButton
  • CancelButton
Widgets详细描述
ErrorLabel显示错误消息。
MessageLabel显示一条消息。默认情况下,它显示“欢迎使用<Name>安装向导”消息。
InformationLabel显示进度信息。
Radio Buttons详细描述
PackageManagerRadioButton作为维护工具运行时,页面上显示的包管理器单选按钮。
UpdaterRadioButton作为维护工具运行时,页面上显示的更新程序单选按钮。
UninstallerRadioButton当作为维护工具运行时,页面上显示的卸载程序单选按钮。默认选中。
Progress Bar详细描述
InformationProgressBar获取远程包时显示的进度条。
Qt Core FeatureBrief Description
packageManagerCoreTypeChanged()如果想在维修工具的类型发生变化时得到通知,必须连接此信号。Note: 只有当用户启动了所谓的二进制维护工具(安装后)并在单选按钮之间切换时才会发出信号。

示例代码

  function Controller()
  {
      var widget = gui.pageById(QInstaller.Introduction); // 获取 introduction 向导页面
      if (widget != null)
          widget.packageManagerCoreTypeChanged.connect(onPackageManagerCoreTypeChanged);
  }

  onPackageManagerCoreTypeChanged = function()
  {
      console.log("Is Updater: " + installer.isUpdater());
      console.log("Is Uninstaller: " + installer.isUninstaller());
      console.log("Is Package Manager: " + installer.isPackageManager());
  }

(3-2)License Agreement页面

​ 通过实现Controller.prototype.LicenseAgreementPageCallback()函数来与许可协议页面上的小部件交互。

​ 页面中按钮:

  • NextButton
  • CancelButton
  • BackButton
Widgets详细描述
LicenseListWidget列出可用的license。
LicenseTextBrowser显示所选license文件的内容。
AcceptLicenseLabel显示接受许可证单选按钮旁边的文本。
RejectLicenseLabel显示拒绝许可证单选按钮旁边的文本。
Radio Buttons详细描述
AcceptLicenseRadioButton接受许可协议。
RejectLicenseRadioButton拒绝许可协议。默认选中。

(3-3)Target Directory页面

​ 通过实现Controller.prototype.TargetDirectoryPageCallback()函数来与目标目录选择页面上的小部件交互。

​ 页面中可用按钮:

  • NextButton
  • CancelButton
  • BackButton
Widgets详细描述
MessageLabel显示帮助信息
TargetDirectoryLineEdit显示安装目标目录的值。
WarningLabel显示一个警告。

(3-4)Component Selection页面

通过实现Controller.prototype.ComponentSelectionPageCallback()函数来与组件选择页面上的小部件交互。

页面中按钮:

  • NextButton
  • CancelButton
  • BackButton
Methods详细信息
selectAll()如果可能,选择所有可用的包。
deselectAll()如果可能,取消选择所有可用的包。
selectDefault()将可用包的检查状态重置为初始状态。
selectComponent(id)选择带有id (string)的包。
deselectComponent(id)取消选择带有id (string)的包。
Push Buttons详细描述
SelectAllComponentsButton如果可能,选择所有可用的包。
DeselectAllComponentsButton如果可能,取消选择所有可用的包。
SelectDefaultComponentsButton将可用包的检查状态重置为初始状态
ResetComponentsButton重置为已安装的组件。
FetchCategoryButton从类别中获取组件。
Widgets详细信息
CategoryGroupBox包含用于选择存储库类别的复选框

安装程序框架3.1将存储库类别作为一个新特性引入。当使用包含存储库类别的安装程序时,可以根据类别的显示名称选择类别,获取其内容,然后选择包含的组件进行安装。

例如:可以从一个类别中获取组件,如下:


  Controller.prototype.ComponentSelectionPageCallback = function()
  {
      var page = gui.pageWidgetByObjectName("ComponentSelectionPage");

      //如果CategoryGroupBox可见,选中其中一个复选框 ,并在选择任何组件之前单击获取按钮  
      var groupBox = gui.findChild(page, "CategoryGroupBox");
      if (groupBox) {
          console.log("groupBox found");
          // findChild第二个参数是复选框的显示名称  
          var checkBox = gui.findChild(page, "Archive");
          if (checkBox) {
              console.log("checkBox found");
              console.log("checkBox name: " + checkBox.text);
              if (checkBox.checked == false) {
                  checkBox.click();
                  var fetchButton = gui.findChild(page, "FetchCategoryButton");
                  if (fetchButton) {
                      console.log("fetchButton found");
                      fetchButton.click();
                  } else {
                      console.log("fetchButton NOT found");
                  }
              }
          } else {
              console.log("checkBox NOT found");
          }
      } else {
          console.log("groupBox NOT found");
      }
      //现在可以从获取的类别中选择组件  
  }


(3-5)Start Menu Directory页面

​通过实现Controller.prototype.StartMenuDirectoryPageCallback()函数来与准备安装页面上的小部件交互。

​ 页面按钮:

  • NextButton

  • CancelButton

  • BackButton

    Widgets详细描述
    StartMenuPathLineEdit显示创建程序快捷方式的目录。

(3-6)执行安装页面

​ 通过实现Controller.prototype.PerformInstallationPageCallback()函数来与执行安装页面上的小部件交互。

页面按钮:

  • CommitButton
  • CancelButton

(3-7)完成页面

​ 通过实现Controller.prototype.FinishedPageCallback()函数来与安装完成页面上的小部件交互。

​ 页面按钮:

  • CommitButton
  • CancelButton
  • FinishButton
Widgets详细描述
MessageLabel显示帮助信息
RunItCheckBox文本字段,通知用户他们可以在安装过程结束后启动应用程序。
四、对于自定义页面的交互

​ 自定义页面注册为Dynamic O b j e c t N a m e , 其 中 {ObjectName},其中 ObjectName{ObjectName}是UI文件中设置的对象名称。因此,调用Dynamic${ObjectName}Callback()函数。小部件可以使用它们的对象名称(来自UI文件)来寻址。

​ 例如:


  function Component()
  {
      //在选择安装目录页面 新增加自定义的页面SomePageWidget
      installer.addWizardPage(component, "SomePageWidget", QInstaller.TargetDirectory)
  }

  Component.prototype.DynamicSomePageWidgetCallback = function()
  {
      var page = gui.pageWidgetByObjectName("DynamicSomePageWidget");
      page.myButton.click, //UI文件中的myButton按钮
      page.someFancyWidget.subWidget.setText("foobar") 
  }


​ Message Boxes

​ 例如,在执行安装程序应用程序时,应用程序可能会显示一些发生错误时的消息框。当在最终用户的系统上运行应用程序时,但它可能会破坏自动化测试套件。为了克服这个问题,Qt安装程序框架显示的所有消息框都可以通过特定的标识符确认。

IdentifierPossible Answers描述
OverwriteTargetDirectoryYes, No确认使用已经存在的目录作为安装的目标目录。
installationErrorOK, Retry, Ignore执行安装时发生致命错误。
installationErrorWithRetryRetry, Ignore, Cancel执行安装时发生错误。最终用户可以选择“重试”再次尝试。
AuthorizationErrorAbort, OK无法获得提升的权限。
OperationDoesNotExistErrorAbort, Ignore尝试执行某个操作时发生错误,但该操作不存在。
isAutoDependOnErrorOK调用包脚本时发生错误。无法评估该包是否对其他包具有自动依赖关系。
isDefaultErrorOK调用包脚本时发生错误。无法评估默认情况下是否会安装该包。
DownloadErrorRetry, Cancel从远程存储库下载存档散列时发生错误。最终用户可以选择“重试”再次尝试。
archiveDownloadErrorRetry, Cancel从远程存储库下载存档时发生错误。最终用户可以选择“重试”再次尝试。
WriteErrorOK日志含义编写维护工具时出错。
ElevationErrorOK无法获得提升的权限。
unknownOK删除某个包时发生未知错误。
ErrorOK常规错误。
stopProcessesForUpdatesRetry, Ignore, Cancel更新包时发生错误。在执行更新之前,需要退出某些正在运行的应用程序或进程。最终用户可以选择“重试”,以便在停止后再次尝试。
Installer_Needs_To_Be_Local_ErrorOK安装程序二进制文件是从网络位置启动的,但不支持通过网络安装。
TargetDirectoryInUseNo安装的目标目录已经包含一个安装。
WrongTargetDirectoryOK安装的目标目录是一个文件或符号链接。
AlreadyRunningOK另一个应用程序实例已经在运行。

示例代码

  function Controller()
  {
      installer.autoRejectMessageBoxes;
      installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes);
      installer.setMessageBoxAutomaticAnswer("stopProcessesForUpdates", QMessageBox.Ignore);
  }
五、总结

​ 安装脚本主要用于获取安装包几个向导页面的相关(运行环境参数,界面中小部件参数,操作系统环境参数等)。并提供了调试的机制和方法。

​ 可见,安装脚本语法与JavaScript可以说几乎一样。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QT是一款跨平台的应用程序开发框架,能够运行在Windows、Linux和Mac三种操作系统上。为了适应不同操作系统的安装需求,QT提供了相应的在线安装包。 首先,对于Windows系统,我们可以下载QT6的Windows在线安装包。这个安装包可以根据用户的需求选择不同组件进行安装,以便开发各种类型的应用程序。安装包内部包含了必要的库文件、示例代码和开发工具,既可以满足普通用户的使用需求,也可以满足开发人员的开发需求。 对于Linux系统,QT6也提供了相应的在线安装包。用户可以选择Ubuntu、CentOS等常见的Linux发行版进行安装安装过程中,用户可以选择安装的功能模块和插件,以便满足不同的应用程序开发需求。QT6的在线安装包还包含了与Linux系统集成的必要工具和库文件。 另外,对于Mac系统,QT6同样提供了在线安装包。用户可以从官方网站上下载并安装这个包。在安装过程中,用户可以按照自己的需要选择安装的组件,比如Qt Creator、Qt Quick、Qt OpenGL等。通过这个安装包,开发人员可以方便地在Mac系统上进行QT应用程序的开发和调试。 总的来说,QT6的在线安装包可以在Windows、Linux和Mac三种操作系统上进行安装。用户可以根据自己的需求选择相应的安装包,并根据自己的需要安装相应的组件和插件。这样,用户就可以方便地使用和开发QT应用程序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iriczhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值