通常:我需要一个bool或其他钩子来确定是否已选择要安装的组件,以便我的controlscript.qs(或特定于组件的installscript.qs)可以采取适当的措施。
特别是:Qt安装程序框架具有几个默认页面供用户单击。在Windows上,有一个StartMenuSelection页面,该页面允许用户在Windows“开始”菜单中指定应用程序的快捷方式应进入的组(如果有)。
Start Menu group selection example
要安装的组件之一是“开始”菜单中的(可选)快捷方式。如果未选择安装,则开始菜单中将没有指向已安装应用程序的快捷方式。
我的问题是,无论用户是否在“开始”菜单中要求快捷方式,“开始菜单”组选择页面都会显示。我知道如何在所有情况下都摆脱它。但这不是取决于是否确实安装了“开始”菜单快捷方式。
我有一个包含以下内容的控制脚本:
function Controller()
{
}
Controller.prototype.StartMenuDirectoryPageCallback = function()
{
// Get the current wizard page
var widget = gui.currentPageWidget();
if (widget != null) {
var component = installer.componentByName("startmenu"); // startmenu is the component name
//if (!component.isSelected){
//if (!component.isSelectedForInstallation){
if (!component.isInstalled){
// I only want this hidden if the user didn't want a start menu link
// Either of the below commands will skip the startMenuSelection page
installer.setDefaultPageVisible(QInstaller.StartMenuSelection, false);
//gui.clickButton(buttons.NextButton);
}
}
}
但这不起作用。无论是否实际选择安装组件,component.isSelected和component.isSelectedForInstallation始终返回false,component.isInstalled始终返回true。也许这些是错误的布尔值?
也许这是错误的方法?本质上,我只需要一个钩子即可确定是否选择了组件。
答案 0 :(得分:0)
他们在这里使用:
component.installed
isInstalled
是一个函数(http://doc.qt.io/qtinstallerframework/scripting-component.html#isInstalled-method),这就是为什么它可能总是返回true的原因。
因此,component.isInstalled()
可能也可以工作...
使用installationRequested()
也是另一种可能性。这可能是在实际安装之前设置的。