| name | qt-installer-framework-config |
| description | Configure Qt Installer Framework for cross-platform installers with component management, online updates, and custom UI |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
| tags | ["qt","installer","deployment","distribution","packaging"] |
| graph | {"domains":["domain:software-engineering"],"specializations":["specialization:desktop-development"],"skillAreas":["skill-area:cross-platform-desktop","skill-area:deployment-infrastructure-management"],"roles":["role:desktop-developer","role:fullstack-engineer"],"workflows":["workflow:feature-development","workflow:release-management"]} |
qt-installer-framework-config
Configure Qt Installer Framework (IFW) for cross-platform installers. This skill generates installer configurations with component management, online updates, maintenance tool, and custom branding.
Capabilities
- Generate installer configuration files
- Set up component structure with dependencies
- Configure online repository for updates
- Customize installer UI and branding
- Set up maintenance tool configuration
- Configure uninstaller behavior
- Generate component scripts
- Set up platform-specific settings
Input Schema
{
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Path to the project"
},
"installerName": {
"type": "string",
"description": "Name of the installer"
},
"appInfo": {
"type": "object",
"properties": {
"name": { "type": "string" },
"version": { "type": "string" },
Output Schema
{
"type": "object",
"properties": {
"success": { "type": "boolean" },
"structure": {
"type": "object",
"properties": {
"configDir": { "type": "string" },
"packagesDir": { "type": "string" }
}
},
"buildCommands": {
"type": "object",
"properties": {
"offline": { "type"
Directory Structure
installer/
โโโ config/
โ โโโ config.xml
โ โโโ controller.qs
โ โโโ style.qss
โโโ packages/
โ โโโ com.company.app/
โ โ โโโ meta/
โ โ โ โโโ package.xml
โ โ โ โโโ installscript.qs
โ โ โ โโโ license.txt
โ โ โโโ data/
โ โ โโโ [application files]
โ โโโ com.company.app.plugins/
โ โโโ meta/
โ โ โโโ package.xml
โ โโโ data/
โ โโโ [plugin files]
โโโ build/
โโโ [generated installer]
Configuration Files
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>My Application</Name>
<Version>1.0.0</Version>
<Title>My Application Installer</Title>
<Publisher>My Company</Publisher>
<StartMenuDir>My Application</StartMenuDir>
<TargetDir>@HomeDir@/MyApplication</TargetDir>
<WizardStyle>Modern</WizardStyle>
<StyleSheet>style.qss</StyleSheet>
<TitleColor>#2196F3</TitleColor>
<Logo>logo.png</Logo>
<Watermark>watermark.png</Watermark>
<Banner>banner.png</Banner>
<AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>
true
MaintenanceTool
https://updates.mycompany.com/repo
1
controller.qs
package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>My Application</DisplayName>
<Description>Main application component</Description>
<Version>1.0.0</Version>
<ReleaseDate>2024-01-15</ReleaseDate>
<Name>com.company.app</Name>
<Dependencies>com.company.app.runtime</Dependencies>
<Default>true</Default>
<Essential>true</Essential>
<ForcedInstallation>true</ForcedInstallation>
<Licenses>
<License name="EULA" file="license.txt"/>
</Licenses>
<Script>installscript.qs</Script>
</Package>
installscript.qs
function Component() {
}
Component.prototype.createOperations = function() {
component.createOperations();
if (systemInfo.productType === "windows") {
component.addOperation("CreateShortcut",
"@TargetDir@/MyApp.exe",
"@StartMenuDir@/My Application.lnk",
"workingDirectory=@TargetDir@",
"iconPath=@TargetDir@/MyApp.exe",
"iconId=0",
"description=Launch My Application");
component.addOperation("CreateShortcut",
"@TargetDir@/MyApp.exe",
"@DesktopDir@/My Application.lnk");
component.addOperation("RegisterFileType",
"myapp",
"@TargetDir@/MyApp.exe '%1'",
"My Application File",
"text/x-myapp",
"@TargetDir@/MyApp.exe,0",
"ProgId=MyCompany.MyApp");
}
if (systemInfo.productType === "osx") {
component.addOperation("Execute",
, ,
,
);
}
(systemInfo. === ) {
component.(,
,
+
+
+
+
);
}
}
controller.qs
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(this, Controller.prototype.installationFinishedPageCallback);
}
Controller.prototype.IntroductionPageCallback = function() {
if (installer.isUnattended()) {
gui.clickButton(buttons.NextButton);
}
}
Controller.prototype.TargetDirectoryPageCallback = function() {
var widget = gui.currentPageWidget();
widget.TargetDirectoryLineEdit.setText(installer.value("HomeDir") + "/MyApp");
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.selectAll();
}
Controller.prototype. = () {
gui.()..();
}
.. = () {
(installer.() && installer. === .) {
widget = gui.();
(widget.) {
widget..();
}
}
}
Build Commands
binarycreator -c config/config.xml -p packages MyAppInstaller
binarycreator -c config/config.xml -p packages -n MyAppOnlineInstaller
repogen -p packages repository
repogen --update-new-components -p packages repository
Online Update Repository
repogen -p packages output/repository
rsync -avz output/repository/ user@server:/var/www/updates/
repogen --update-new-components -p packages output/repository
Best Practices
- Version components independently: Allow granular updates
- Use online repository: Enable auto-updates
- Customize UI: Match application branding
- Test on all platforms: Verify installer behavior
- Sign installers: Code sign for trust
- Include maintenance tool: Allow updates/uninstall
Related Skills
qt-cmake-project-generator - Build system setup
auto-update-system process - Update workflow
windows-authenticode-signer - Windows signing
macos-notarization-workflow - macOS notarization
Related Agents
qt-cpp-specialist - Qt expertise
release-manager - Release workflow