上一篇文章记录了QIFW
基本的使用,下面说说一些个性化配置功能.
打包结构说明
基本结构如下所示:
主要包含两部分,config
和 packages
.
config
目录主要放置一些打包软件的整体配置,比如打包后安装过程中显示的软件名称、版本号、公司名称、界面图标等等信息;
packages
目录主要配置每个安装组件的信息。组件化安装配置是 QIFW
的一大特色,可以根据需求选择安装那些功能组件,这一点在我们安装 Qt
的时候很明显,可以选择安装 Qt
的那些模块。
每个组件有自己的一些配置信息,以及组件之间可以有依赖关系,形象的展示为树状关系.
比如目前有2个版本需要根据系统版本来进行选择安装,64位程序时不能安装在32位机器上的,在安装时需要根据当前系统版本自行判断安装那个版本,64位机器可以安装32和64位软件,32位机器只能安装32复位软件, 否则无法运行。
config配置
一个简单的配置字段如下所示,XML都添加了注释说明:
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Installer Demo</Name> <!-- 名称 -->
<Version>1.0.0</Version> <!-- 版本 -->
<Title>Installer Demo one</Title> <!-- 安装界面显示的标题 -->
<Publisher>devstone</Publisher> <!-- 所属公司,即公司名称 -->
<ProductUrl>http://www.kevinlq.com</ProductUrl> <!-- 软件URL地址 -->
<InstallerWindowIcon>windowIcon</InstallerWindowIcon> <!-- 安装界面Icon-->
<InstallerApplicationIcon>windowIcon</InstallerApplicationIcon> <!-- 打包后的exe图标-->
<Logo>logo</Logo>
<StartMenuDir>QIFWDemo</StartMenuDir>
<TargetDir>C:/QIFWDemo</TargetDir> <!-- 安装路径-->
<RemoveTargetDirEnable>false</RemoveTargetDirEnable> <!-- 安装路径是否可以自定义选择,如果为false则不能编辑(新添加字段) -->
<WizardStyle>Modern</WizardStyle> <!-- 安装向导页面的样式,Modern(现代),Mac,Aero,Classic(经典)-->
<AllowSpaceInPath>false</AllowSpaceInPath> <!-- 安装路径是否允许包含非ASCII字符-->
<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible> <!-- 隐藏安装对话框中的 存储库设置页面-->
<RunProgramDescription>这是一个安装Demo展示</RunProgramDescription> <!-- 安装程序描述文本-->
<MaintenanceToolName>SDKMaintenanceTool</MaintenanceToolName>
<ComponentBtnEnable>false</ComponentBtnEnable> <!-- 组件选择页面的选择按钮是否可以点击(新添加字段) -->
</Installer>
注意上述备注的新加字段,RemoveTargetDirEnable
和 ComponentBtnEnable
是我自定义的字段,如果直接从官方下载 exe进行打包,可能会发生找不到字段的错误,这2个字段可以通过修改源码进行编译。
路径: QIFW\src\libs\installer\constants.h
static const QLatin1String scRemoveTargetDirEnable("RemoveTargetDirEnable"); /// 组件安装路径是否能够编辑
static const QLatin1String scComponentBtnEnable("ComponentBtnEnable"); /// 组件选择页面三个按钮是否能够点击
初始化:
Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, ParseMode parseMode)
{
......
if (!s.d->m_data.contains(scComponentBtnEnable))
s.d->m_data.insert(scComponentBtnEnable, true);
......
}
void ComponentSelectionPage::initializePage()
{
/*! devstone add scRemoveTargetDirEnable [2019.06.14]*/
bool bEnableSelect = packageManagerCore()->valueVariant(scComponentBtnEnable).toBool();
d->setCompomentSelectEnable(bEnableSelect);
PackageManagerPage::initializePage();
}
注:详细代码可以到我的 GitHub 主页去下载.
packages 配置
packages
目录包含了2部分内容,meta
和data
(我们需要打包的一堆程序文件).
meta
配置主要有一下几个(一般常用的就前2个):
- installer.qs
- package.xml
- xxx.ui(自定义界面才需要)
installer.qs
文件其实就是一个 js
脚本文件,我们可以使用 js
对安装软件进行二次开发定制,可以控制某个安装向导页面是否显示,以及显示后执行那些操作,又或者添加新的 ui
界面都可以通过
脚本进行控制.
通过脚本可以判断当前操作系统的类型,进而对安装的组件进行适配。
package.xml
可以配置每个组件的性质,比如版本、名字,是否默认,是否能够编辑.
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>x86-64 bit binaries</DisplayName>
<Description>Binaries that require a x86-64 CPU.</Description>
<Version>1.0.0-1</Version>
<ReleaseDate>2014-12-01</ReleaseDate>
<Default>false</Default>
<CompomentsEnable>false</CompomentsEnable> <!-- 组件是否可以编辑,即改变Checkbox(新添加字段) -->
</Package>
CompomentsEnable
字段是自定义字段,可以控制某个组件是否能够手动点击取消或者选择.
安装界面
打包后的软件安装过程如下:
这里对安装路径进行了限制,不让用户修改,可以通过我新添加的字段进行配置,默认可以编辑.
如果没有配置该字段,默认可以编辑.
RemoveTargetDirEnable
上面是根据当前系统版本进行了限制.
源码下载
参考文章
作者:鹅卵石
时间: 2019年06月15日22:54:35
版本:V 0.0.1
邮箱:kevinlq@163.com
版权:本博客若无特别声明,均属于作者原创文章,欢迎大家转载分享。但是,
希望您注明来源,并留下原文地址,这是对作者最大的尊重,也是对知识的尊重。
如果您对本文有任何问题,可以在下方留言,或者Email我.
捐赠
如果觉得分享的内容不错,可以请作者喝杯咖啡.