Linux环境下Qt应用程序安装器(installer)制作

news2024/11/26 10:50:13

本文介绍Linux环境下Qt应用程序安装器(installer)的制作。

安装器(installer)是将应用程序安装到操作系统平台的可执行文件,它采用向导式对话框指导用户安装应用程序,如我们在Windows操作系统安装Office软件时,有1个向导让你选择安装哪些组件及安装位置等,最终将程序安装到你的机器上。

1.安装软件

安装器的制作需要使用Qt的"binarycreator",需确保程序已经安装,若没安装,可在官网下载安装,地址:Index of /official_releases/qt-installer-framework

2.创建目录

创建如下目录:

"tutorial"目录通常为应用程序名称。这里为了方便,写了个脚本(createdir.sh):

#!/bin/sh

mkdir config
mkdir packages

cd packages
mkdir com.vendor.product
cd com.vendor.product
mkdir data
mkdir meta

echo "done!"

将脚本拷贝到"tutorial"目录(名称可根据情况改变),赋予可执行权限,并执行,执行完删除。

sudo chmod a+x createdir.sh
./createdir.sh
rm create.sh

以项目"fixture"为例,执行完脚本后创建如下目录:

下面对各目录内容作详细描述。

3.config目录

在"config"目录下创建"config.xml"文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Your application</Name>
    <Version>1.0.0</Version>
    <Title>Your application Installer</Title>
    <Publisher>Your vendor</Publisher>
    <StartMenuDir>Super App</StartMenuDir>
    <TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
</Installer>

其中,

Name:安装程序开始时指示安装程序名称,如下图标记2所示。

Version:软件程序版本。

Title:安装器的标题栏显示内容,如下图标记1所示。

Publish:软件供应商名称。

StartMenuDir:创建在启动菜单中目录名称。

TargetDir:应用程序默认安装位置,当然,用户在安装过程中也可以自己选择。

以上内容可以根据实际情况修改。

至此,我们完成了“config”文件夹的内容。

4.data目录

"data"目录为我们放置打包后的应用程序的地方,Qt应用程序打包方法可参见我以前的博文(Linux环境下Qt应用程序打包与发布-CSDN博客),这里就不详细介绍了。把打包后的所有内容拷贝到这里。

至此,我们完成了“data”文件夹的内容。

5.meta目录

1)安装脚本

在"meta"目录下创建"installscript.qs"文件,内容如下:

/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the FOO module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

function Component()
{
    // constructor
    component.loaded.connect(this, Component.prototype.loaded);
    if (!installer.addWizardPage(component, "Page", QInstaller.TargetDirectory))
        console.log("Could not add the dynamic page.");
}

Component.prototype.isDefault = function()
{
    // select the component by default
    return true;
}

Component.prototype.createOperations = function()
{
    try {
        // call the base create operations function
        component.createOperations();
    } catch (e) {
        console.log(e);
    }
}

Component.prototype.loaded = function ()
{
    var page = gui.pageByObjectName("DynamicPage");
    if (page != null) {
        console.log("Connecting the dynamic page entered signal.");
        page.entered.connect(Component.prototype.dynamicPageEntered);
    }
}

Component.prototype.dynamicPageEntered = function ()
{
    var pageWidget = gui.pageWidgetByObjectName("DynamicPage");
    if (pageWidget != null) {
        console.log("Setting the widgets label text.")
        pageWidget.m_pageLabel.text = "This is a dynamically created page.";
    }
}

这里的内容,可根据实际情况添加或减少。

2)许可文件

在"meta"目录下创建"license.txt"文件,内容可自己定义,主要是关于软件安装许可方面的内容。

3)包描述文件

在"meta"目录下创建"package.xml"文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>The root component</DisplayName>
    <Description>Install this example.</Description>
    <Version>0.1.0-1</Version>
    <ReleaseDate>2010-09-21</ReleaseDate>
    <Licenses>
        <License name="Beer Public License Agreement" file="license.txt" />
    </Licenses>
    <Default>script</Default>
    <Script>installscript.qs</Script>
</Package>

这里,

DisplayName:软件安装时,由用户选择勾选的组件,如下图1标记1。

Description:软件安装时,右侧描述,如下图1标记2。

Version:软件版本。

ReleaseDate:发布日期。

Licenses:许可,这里可指示许可文件名称,也就是2)中的"license.txt"文件,内容将显示在向导对话框中,如下图2中标记1。

Script:安装脚本,也就是1)中的"installscript.qs"文件。

以上内容可以根据实际情况修改。

图1

图2

至此,我们完成了“meta”文件夹的内容。

6.制作

切换到主目录下,也即"tutorial"目录,输入指令:

export PATH=/opt/Qt5.13.2/QtIFW-4.3.0/bin:$PATH
binarycreator -c config/config.xml -p packages YourInstaller

这里的"QtIFW-4.3.0"目录为你实际安装的版本,路径也类似,"YourInstaller"可自己根据实际情况指定。

至此,我们完成了程序安装器的制作。

总结,本文介绍Linux环境下Qt应用程序安装器(installer)的制作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1089476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣:611. 有效三角形的个数

今日为大家分享一道力扣611有效三角形的个数&#xff01;本文将会为大家为大家讲解题目&#xff0c;然后算法思路&#xff0c;最后再进行代码的实现&#xff01;希望看完本文能对读者有一定的收获&#xff01; 一、题目描述 通过题目的描述可以看出&#xff0c;意思是给定一个…

[产品体验] GPT4识图功能

[产品体验] GPT4识图功能 图片配文字超强的OCR能力知识问答多图解释 打开chatgpt的时候突然发现能用识图了&#xff0c;赶紧去体验一下&#xff0c;大大的震撼… 图片配文字 超强的OCR能力 我传上去的图片并不清晰… 还能准确识别&#xff0c;orz &#xff01; 知识问答 多…

代码随想录Day18 LeetCode235 二叉搜索树的公共祖先 T701二叉搜索树中的插入操作 T140 删除二叉搜索树中的公共节点

LeetCode T235 二叉搜索树的公共祖先 题目链接235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目思路 此题不涉及遍历顺序. 关于二叉搜索树的定义,这里我就不过多赘述了,前面几篇都说清楚了,根节点比左子树元素都大,比右子树元素都小,这道题我们就可…

计算机体系结构和操作系统

这篇文章的主要内容是冯诺依曼计算机体系结构和操作系统的理解。 目录 一.冯诺依曼计算机体系结构 二.操作系统的理解 一.冯诺依曼计算机体系结构 如图是冯诺依曼计算机体系结构&#xff0c;计算机本质就是对数据进行处理的机器&#xff0c;图中&#xff0c;数据从输入设备交给…

VMWare配置桥接

一、设置网络模式 二、编辑网卡配置 ip配置的子网掩码和默认网关保持和宿主机一致&#xff0c;ip局域网内不冲突。 # cd /etc/sysconfig/network-scriptslsvim ifcfg-ens160 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone DEFROUTEyes IPV4_FAILURE_FATALno IP…

【数据结构】双链表的相关操作(声明结构体成员、初始化、判空、增、删、查)

双链表 双链表的特点声明双链表的结构体成员双链表的初始化带头结点的双链表初始化不带头结点的双链表初始化调用双链表的初始化 双链表的判空带头结点的双链表判空不带头结点的双链表判空 双链表的插入&#xff08;按值插入&#xff09;头插法建立双链表带头结点的头插法每次调…

每日一题 1488. 避免洪水泛滥(中单,贪心,二分)

思路&#xff1a; 当某一天为晴天&#xff0c;可以选择抽水时&#xff0c;我们是不知道要抽哪一个的&#xff0c;最优解应该是抽接下来最近的要发洪水的湖泊&#xff0c;所以我们先把晴天的坐标保存下来&#xff0c;需要用的时候再拿出来需要注意的是&#xff0c;只有晴天发生…

【MATLAB源码-第46期】基于matlab的OFDM系统多径数目对比,有无CP(循环前缀)对比,有无信道均衡对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;正交频分复用&#xff09;是一种频域上的多载波调制技术&#xff0c;经常用于高速数据通信中。以下是关于多径数目、有无CP&#xff08;循环前缀&#xff09;以及有无信道均衡在OFDM系统中对误码率的影响&am…

Python对接海康威视机器视觉工业相机

一、下载MVS客户端 海康机器人-机器视觉-下载中心 二、解压并安装MVS客户端 三、找到MVS示例代码&#xff08;代码在MVS的安装位置&#xff09; 工业相机只允许单条连接&#xff0c;也就是说MVS如果连接了相机&#xff0c;python代码就无法获取数据&#xff0c;此时必须退出M…

计算机毕业设计 大学生选修选课系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

pinctrl子系统 - 架构和结构体关系(四)

一&#xff0c;pinctrl的引入 由于SoC系统越来越复杂、集成度越来越高&#xff0c;SoC中pin的数量也越来越多、功能也越来越复杂&#xff0c;这就对如何管理、使用这些pins提出了挑战。因此&#xff0c;用于管理这些pins的硬件模块&#xff08;pin controller&#xff09;就出…

MySQL读写分离之一主一从

原理 MySQL 的主从复制&#xff0c;是基于二进制日志&#xff08; binlog &#xff09;实现的。 准备 主机 角色 用户名 密码 192.168.2.3 master root newPwd520 192.168.2.4 slave root newPwd520 主从复制的搭建&#xff0c;可以参考 MYSQL的主从复制-CSDN博客 一主一从读…

【K8S】集群中部署nginx应用 运行手写yaml文件报错排查过程

文章目录 ❌报错信息&#x1f50e;排查过程✅问题解决 ❌报错信息 提取报错信息【 unknown field “spec.selector.replicas”】【 unknown field “spec.selector.template”】 [rootmaster ~]# kubectl apply -f nginx-deployment.yaml Error from server (BadRequest): erro…

CCF CSP认证 历年题目自练Day30

题目一 试题编号&#xff1a; 202203-1 试题名称&#xff1a; 未初始化警告 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 题目背景 一个未经初始化的变量&#xff0c;里面存储的值可能是任意的。因此直接使用未初始化的变量&#xff0c;比…

通过API接口进行商品价格监控,可以按照以下步骤进行操作

要实现通过API接口进行商品价格监控&#xff0c;可以按照以下步骤进行操作&#xff1a; 申请平台账号并选择API接口&#xff1a;根据需要的功能&#xff0c;选择相应的API接口&#xff0c;例如商品API接口、店铺API接口、订单API接口等&#xff0c;这一步骤通常需要我们在相应…

MyBatis(中)

1、动态sql&#xff1a; 1、if标签&#xff1a; mapper接口: //if 标签 多条件查询List<Car> selectByMultiConditional(Param("brand") String brand,Param("guidePrice") Double guidePrice,Param("carType") String carType); map…

ATF(TF-A)之UBSAN动态代码分析

安全之安全(security)博客目录导读 目录 一、UBSAN简介 二、TF-A中UBSAN配置选项 一、UBSAN简介 未定义行为消毒器(Undefined Behavior Sanitizer&#xff0c;UBSAN)是Linux内核的未定义行为动态检测器。 详细信息可参考&#xff1a;https://github.com/google/kernel-sanit…

3D 生成重建007-Fantasia3D和Magic3d两阶段玩转文生3D

3D生成重建3D 生成重建007-Fantasia3D和magic3d 文章目录 0 论文工作1 论文方法1.1 magic3d1.2 Fantasia3D 2 效果2.1 magic3d2.2 fantasia3d 0 论文工作 两篇论文都是两阶段法进行文生3d&#xff0c;其中fantasia3D主要对形状和外表进行解耦&#xff0c;然后先对geometry进行…

第五章 图

第五章 图 图的基本概念图的应用背景图的定义和术语 图的存储结构邻接矩阵邻接表 图的遍历连通图的深度优先搜索连通图的广度优先搜索 图的应用最小生成树拓扑排序 小试牛刀 图的基本概念 图结构中&#xff0c;任意两个结点之间都可能相关&#xff1b;而在树中&#xff0c;结点…

接口自动化测试,完整入门篇

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…