组件脚本

对于每个组件,您可以指定一个脚本,来准备要由安装程序执行的操作。脚本格式必须与QJSEngine兼容。

构造

脚本必须包含安装程序在加载脚本时创建的Component对象。 因此,脚本必须至少包含Component()函数,该函数执行初始化,例如将页面放置在正确的位置或连接信号和槽。

以下代码片段将ErrorPage页面(这是从errorpage.ui加载的用户界面文件的类名),放置在准备安装页面的前面,并将其完整性设置为false。

function Component()
{
// Add a user interface file called ErrorPage, which should not be complete
installer.addWizardPage( component, "ErrorPage", QInstaller.ReadyForInstallation );
component.userInterface( "ErrorPage" ).complete = false;
}

有关更多信息,请参见installer::addWizardPage()和 component::userInterface()的文档。

安装钩子

您可以在脚本中添加以下钩子方法:

方法 描述
Component.prototype.retranslateUi 当安装程序的语言更改时调用。
Component.prototype.createOperations 见component::createOperations()。
Component.prototype.createOperationsForArchive 见component::createOperationsForArchive().
Component.prototype.createOperationsForPath 见component::createOperationsForPath().

全局变量

安装程序将以下符号放入脚本空间:

符号 描述
installer 引用组件的QInstaller
component 引用组件的Component

消息框

您可以使用以下静态成员函数从脚本中显示QMessageBox:

> QMessageBox::critical()

> QMessageBox::information()

> QMessageBox::question()

> QMessageBox::warning()

为了方便起见,可以通过QMessageBox.Ok,QMessageBox.Open等使QMessageBox::StandardButton可用。

向组件添加操作

例如,在拷贝文件或更新文件内容时,你可能需要在提取内容后添加自定义操作。您可以在脚本中使用component::addOperation(),来创建并添加更新操作到安装中。如果要运行要求管理员权限的操作,请改用component::addElevatedOperation()。

操作需要在实际安装步骤之前添加。覆盖component::createOperations(),以注册组件的自定义操作。

每个操作都有一个唯一的键,用于识别的,且最多可以包含五个参数。在参数值中,可以使用通过installer::setValue()设置的变量值。有关更多信息,请参见预定义变量章节。

有关所有可用操作的总结,请参见操作章节。

注册自定义操作

您可以在安装程序中注册自定义安装操作,通过派生KDUpdater::UpdateOperation类。 以下代码显示了必须实现的方法:

#include <UpdateOperation>

class CustomOperation : public KDUpdater::UpdateOperation
{
public:
CustomOperation()
{
setName( "CustomOperation" );
} void backup()
{
// do whatever is needed to restore the state in undoOperation()
} bool performOperation()
{
const QStringList args = arguments();
// do whatever is needed to do for the given arguments bool success = ...;
return success;
} void undoOperation()
{
// restore the previous state, as saved in backup()
} bool testOperation()
{
// currently unused
return true;
} CustomOperation* clone() const
{
return new CustomOperation;
} QDomDocument toXml()
{
// automatically adds the operation's arguments and everything set via setValue
QDomDocument doc = KDUpdater::UpdateOperation::toXml(); // if you need any information to undo the operation you did,
// add them to the doc here return doc;
} bool fromXml( const QDomDocument& doc )
{
// automatically loads the operation's arguments and everything set via setValue
if( !KDUpdater::UpdateOperation::fromXml( doc ) )
return false; // if you need any information to undo the operation you did,
// read them from the doc here return true;
}
};

最后,您需要注册您的自定义操作类,如下所示:

#include <UpdateOperationFactory>

KDUpdater::UpdateOperationFactory::instance().registerUpdateOperation< CustomOperation >( "CustomOperation" );

现在,您可以在安装程序中使用您的操作了,方式和预定义操作相同。

预定义变量

您可以在脚本中使用以下预定义的变量来方便文件夹访问:

符号 描述
ProductName 要安装的产品的名称,如config.xml中所定义。
ProductVersion 要安装的产品的版本号,如config.xml中所定义。
Title 安装程序的标题,如config.xml中所定义。
Publisher 安装程序的发布者,如config.xml中所定义。
Url 产品网址,如config.xml中定义。
StartMenuDir 开始菜单组,如config.xml中所定义。 仅在Windows上可用。
TargetDir 用户选择的安装目标文件夹。
DesktopDir 包含用户桌面的文件夹名称。仅在Windows上可用。
os 当前平台:"x11", "win", or "mac"。变量已启用:请改用systemInfo。
RootDir 文件系统的根目录。
HomeDir 当前用户的主目录。
ApplicationsDir 应用程序文件夹。
例如,Windows上的C:\Program Files,Linux上的/opt和macOS上的/Applications。
另请参阅表格,列出了Windows上应用程序目录示例。
ApplicationsDirX86 32位程序的应用程序文件夹。 这在Windows上很有用,在其他平台上与ApplicationsDir相同。例如,Windows上的C:\Program Files (x86)。
另请参阅表格,列出了Windows上应用程序目录示例。
ApplicationsDirX64 64位程序的应用程序文件夹。 这在Windows上很有用,在其他平台上与ApplicationsDir相同。例如,Windows上的C:\Program Files。
另请参阅表格,列出了Windows上应用程序目录示例。
InstallerDirPath 包含安装程序可执行文件的目录。
InstallerFilePath 安装程序可执行文件的文件路径。
UserStartMenuProgramsPath 包含当前用户开始菜单中各子项的文件夹的路径。例如,C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs,仅在Windows上可用。
AllUsersStartMenuProgramsPath 包含所有用户开始菜单中各子项的文件夹的路径。例如,C:\ProgramData\Microsoft\Windows\Start Menu\Programs,仅在Windows上可用。

可以通过调用installer::value()来解析变量。 如果嵌入在“ @”中,它们也可以是作为的字符串的一部分,并作为参数传递给安装操作:

if (installer.value("os") === "win") {
component.addOperation("CreateShortcut", "@TargetDir@/MyApp.exe", "@StartMenuDir@/MyApp.lnk");
}

例如,Windows上的应用程序目录:

操作系统 (Windows) Qt Installer Framework 变量 示例路径
32bit 32bit ApplicationsDir C:\Program Files
ApplicationsDirX86 C:\Program Files
ApplicationsDirX64 C:\Program Files
64bit 32bit ApplicationsDir C:\Program Files (x86)
ApplicationsDirX86 C:\Program Files (x86)
ApplicationsDirX64 C:\Program Files
64bit ApplicationsDir C:\Program Files
ApplicationsDirX86 C:\Program Files (x86)
ApplicationsDirX64 C:\Program Files

原创造福大家,共享改变世界

献出一片爱心,温暖作者心灵


Qt Installer Framework翻译(7-4)的更多相关文章

  1. Qt Installer Framework翻译(5-4)

    自定义安装程序 您可以使用脚本通过以下方式来自定义安装程序: > 添加Qt Installer Framework操作,该操作由脚本提供,并由安装程序执行. > 添加新页面,该页面由您在p ...

  2. Qt Installer Framework翻译(7-6)

    工具 Qt Installer Framework包含以下工具: > installerbase > binarycreator > repogen > archivegen ...

  3. Qt Installer Framework翻译(3-1)

    初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...

  4. Qt Installer Framework翻译(1)

    IFW概览 Qt Installer Framework 提供了一组工具和程序来创建安装程序,并在不重写源代码的情况下将它们部署到所有受支持的桌面 Qt 平台上.安装程序具有本地化外观,并且可以感知运 ...

  5. Qt Installer Framework翻译(4)

    教程:创建安装程序 本教程描述如何为一个小项目创建一个简单的安装程序: 本节描述创建安装程序所必须完成的步骤: 创建一个包文件夹,其中将包含所有配置文件和可安装的包. 创建一个配置文件,其中包含有关如 ...

  6. Qt Installer Framework翻译(7-8)

    C++ API C ++ API文档是为开发Qt Installer Framework的开发人员编写的. 它描述了内部API,因此没有兼容性保证. 此外,该文档尚在开发中,因此缺少部分内容,而其他部 ...

  7. Qt Installer Framework翻译(0)

    本人主攻C++和Qt. 以前一直看人家的博客,找资料学习.今天我也终于开博客啦. 最近在研究Qt install framework(IFW)应用程序安装框架. google也没发现有正儿八经的官方文 ...

  8. Qt Installer Framework翻译(7-2)

    包文件夹 安装程序包含的组件,要么是内嵌的,要么可以从远程存储库加载.在这两种情况下,都需要为组件使用一种安装程序可以读取的文件格式和结构. 包文件夹结构 将所有组件放在相同的根文件夹中,即包文件夹. ...

  9. Qt Installer Framework翻译(7-3)

    控制脚本 对于每个安装程序,您可以指定一个控制脚本,用来与安装程序的部分UI或功能进行交互.控制脚本可以在向导中添加和删除页面,更改现有页面,进行附加检查以及通过模拟用户单击来与UI交互.例如,这允许 ...

随机推荐

  1. React Mobile 搭建记录

    __dirname 总是指向被执行 js 文件的绝对路径,./ 会返回你执行 node 命令的路径,例如你的工作路径. path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数 ...

  2. JS 手札记

    addEventListener中的事件如果移除(removeEventListener)的话不能在事件中执行bind(this)否则会移除无效! // selectCurrent() // copy ...

  3. 为什么我们要使用DTO

    基础结构解释 UI-表现层-与控制器打交道(UI向Controller 传递数据时使用DTO(数据传输对象)) Service-应用服务层 Domain 领域对象 DTO 数据传输对象,一般只包含基础 ...

  4. navicat创建存储过程时报错1064

    1.这是创建的存储过程 2.一保存就会出错 3.后来上网查了一下是存储过程的参数没有设定长度导致的,我们在Navicat中创建存储过程时参数的长度需要自己动手去添加的否则就会包这种错误. 添加上参数的 ...

  5. $CF311B\ Cats\ Transport$ 斜率优化

    AcWing Description Sol 设f[i][j]表示前i个饲养员接走前j只猫咪的最小等待时间. 要接到j猫咪,饲养员的最早出发时间是可求的,设为d: $ d[j]=Tj-\sum_{k= ...

  6. 洛谷训练新手村之“BOSS战-入门综合练习1”题解

    P1478 陶陶摘苹果(升级版) 题目链接:https://www.luogu.com.cn/problem/P1478 题目大意:陶陶有s点体力值,每个苹果消耗体力值,问s体力值最多能摘多少苹果. ...

  7. 看完这篇HTTP,跟面试官扯皮就没问题了

    我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟.醍醐灌顶的感觉. 最初在有 ...

  8. linux下安装cmake方法(1)---下载压缩包

    OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake:还有其它一些软件都需要先安装cmake 1.在linux环境下打开网页浏览器,输入网址:http:/ ...

  9. 条款03:尽可能使用const

    目录 1. 总结 2. const对象 3. const函数返回值和函数参数 4. const成员函数 const成员函数的重要性 bitwise constness logical constnes ...

  10. 【转】Vim显示中文乱码

    Windows下,在Vim中如果想让中文正常显示,可以在 Vim安装目录下找到_vimrc 文件,用记事本打开就行,然后在其中加入如下语句:   set fileencodings=gb2312,gb ...