Qt Installer Framework翻译(7-4)
组件脚本
对于每个组件,您可以指定一个脚本,来准备要由安装程序执行的操作。脚本格式必须与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)的更多相关文章
- Qt Installer Framework翻译(5-4)
自定义安装程序 您可以使用脚本通过以下方式来自定义安装程序: > 添加Qt Installer Framework操作,该操作由脚本提供,并由安装程序执行. > 添加新页面,该页面由您在p ...
- Qt Installer Framework翻译(7-6)
工具 Qt Installer Framework包含以下工具: > installerbase > binarycreator > repogen > archivegen ...
- Qt Installer Framework翻译(3-1)
初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...
- Qt Installer Framework翻译(1)
IFW概览 Qt Installer Framework 提供了一组工具和程序来创建安装程序,并在不重写源代码的情况下将它们部署到所有受支持的桌面 Qt 平台上.安装程序具有本地化外观,并且可以感知运 ...
- Qt Installer Framework翻译(4)
教程:创建安装程序 本教程描述如何为一个小项目创建一个简单的安装程序: 本节描述创建安装程序所必须完成的步骤: 创建一个包文件夹,其中将包含所有配置文件和可安装的包. 创建一个配置文件,其中包含有关如 ...
- Qt Installer Framework翻译(7-8)
C++ API C ++ API文档是为开发Qt Installer Framework的开发人员编写的. 它描述了内部API,因此没有兼容性保证. 此外,该文档尚在开发中,因此缺少部分内容,而其他部 ...
- Qt Installer Framework翻译(0)
本人主攻C++和Qt. 以前一直看人家的博客,找资料学习.今天我也终于开博客啦. 最近在研究Qt install framework(IFW)应用程序安装框架. google也没发现有正儿八经的官方文 ...
- Qt Installer Framework翻译(7-2)
包文件夹 安装程序包含的组件,要么是内嵌的,要么可以从远程存储库加载.在这两种情况下,都需要为组件使用一种安装程序可以读取的文件格式和结构. 包文件夹结构 将所有组件放在相同的根文件夹中,即包文件夹. ...
- Qt Installer Framework翻译(7-3)
控制脚本 对于每个安装程序,您可以指定一个控制脚本,用来与安装程序的部分UI或功能进行交互.控制脚本可以在向导中添加和删除页面,更改现有页面,进行附加检查以及通过模拟用户单击来与UI交互.例如,这允许 ...
随机推荐
- 一种HTML table合并单元格的思路
/** * 合并单元格 * @param table1 表格的ID * @param startRow 起始行 * @param col 合并的列号,对第几列进行合并(从0开始).如果传下来为0就是从 ...
- pycharm 更改创建文件默认路径
1.操作 依次找到以下路径修改为自己想要的路径即可:PyCharm——>Settings——>Appearance&Behavior——>System Setting——&g ...
- [DevExpress]treeList1背景色设置与自定义图标
为了和系统界面一致改成透明色: treeList1.BackColor = Color.Transparent; treeList1.Appearance.Empty.BackColor = Colo ...
- 洛谷$P2604\ [ZJOI2010]$网络扩容 网络流
正解:网络流 解题报告: 传送门$QwQ$ 昂第一问跑个最大流就成不说$QwQ$ 然后第二问,首先原来剩下的边就成了费用为0的边?然后原来的所有边连接的两点都给加上流量为$inf$费用为$w$的边,保 ...
- 电脑端TIM登录时记住密码
为什么每次登录TIM时点了记住密码,下次再登录时还是记不住呢? 不是扫码就是还得输出密码,为这事愁了好多次, 最近终于发现如何记住密码了... 进入登录界面以后,点击左下角这个小图标>> ...
- [MySQL实践] 实践记录
[MySQL实践] 实践记录 版权2019.5.17更新 MySQL MySQL各版本区别 一.选择的版本 1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持 ...
- 亲测有效!CLion2019.2的安装及汉化
CLion的安装.汉化 今天小杨写C语言时,发现这个软件(DEV-C++)太麻烦了,于是就在网上找了一下,发现了两个不错的软件,一个是VC++,另一个是Clion.比较亲于占用内存小的我,选择了后者, ...
- 小小知识点(三十一)MU-MIMO和SU-MIMO分别表示什么?
MU-MIMO是“Multi-User Multiple-InputMultiple-Output”的缩写,直译为“多用户多入多出技术”. SU-MIMO是“Single-User Multiple- ...
- Django之表高级操作
目录 一.如何开启自己的测试脚本? 二.对表数据的添加.更新.删除 1.create() 2.update() 3.delete() 4.查看执行的sql语句 三. 单表查询13个操作 返回Query ...
- P2722 总分 Score Inflation (完全背包模板)
题目传送门:P2722 总分 Score Inflation 题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时 ...