【Qt】QtIFW安装包制作总结-QtIFW安装脚本与语法
⽂章⽬录
⼀、引⾔
对于每个安装程序,可以指定与安装程序的UI或功能的某些部分交互的控制脚本。控制脚本可以向安装向导添加或删除页⾯、更改现有页⾯、执⾏额外的检查,并通过模拟⽤户单击与UI交互。例如,允许⽆⼈值守的安装。
注意:脚本格式必须与QJSEngine兼容。
javascript进度条本节描述为实现这样的控制脚本⽽调⽤的函数。同时还概述安装程序页⾯和每个页⾯上可⽤的⼩部件,如按钮、单选按钮和⾏编辑。
⼆、编写控制脚本
⼀个脚本⾄少需要包含⼀个构造函数,如下:
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提供可在安装程序页⾯上使⽤的按钮
序号JavaScript对象描述
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 Feature Brief Description
packageManagerCoreTypeChanged()如果想在维修⼯具的类型发⽣变化时得到通知,必须连接此信号。Note: 只有当⽤户启动了所谓的⼆进制维护⼯具(安装后)并在单选按钮之间切换时才会发出信号。
⽰例代码
function Controller()
{
var widget = gui.pageById(QInstaller.Introduction);// 获取 introduction 向导页⾯
if(widget !=null)
t(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: "+ );
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论