Windows/Linux部署Qt并通过Qt Installer Framework制作安装包

本文参考 Qt Installer Framework Manual。
若要使用 Qt Installer Framework(简称 QIF),需要在 Qt Online Installer 或 Qt Maintenance Tool 中确保该组件已安装(QIF 组件在 Qt->Developer and Design Tools 下),否则需要先安装。
qif-install
安装好后可在 Qt 安装目录下确认是否有binarycreator可执行文件:

  • Windows:D:\Qt\Tools\QtInstallerFramework\4.8\bin\binarycreator.exe
  • Linux: /opt/Qt/Tools/QtInstallerFramework/4.8/bin/binarycreator

参考 Tutorial: Creating an Installer,以下进行 QIF 配置:
在部署目录下新建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><ProductImages><ProductImage><Image>Logo.svg</Image><Url>https://xxx</Url></ProductImage></ProductImages>
</Installer>

在部署目录下新建package目录,并在 packages 目录下新建 com.vendor.product 目录,在该目录下新建data目录与meta目录,在 meta 目录下新建 packages.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="GNU General Public License v3.0" file="LICENSE" /></Licenses><Default>script</Default><Script>installscript.qs</Script><UserInterfaces><UserInterface>page.ui</UserInterface></UserInterfaces>
</Package>

如果包含了许可文件,则需要将许可文件复制到 meta 目录下,否则可以删去 Licenses 条目。Script 与 UserInterface 条目均为可选,用来定制安装引导程序的页面用户界面与相应操作,例如可以参考 Open ReadMe Example 在安装完成后的界面显示一个 Open README 选项。
open-readme
默认安装引导程序可以省略这两个条目。此外,如果希望为安装程序添加资源文件,可以在部署目录下新建resources目录,在该目录下新建additional.qrc定义资源文件。
QIF 配置完成后,在制作安装包之前,需要首先部署 Qt 项目。

Windows

对于 Windows 而言,部署较为简单,因为 Qt 为 Windows 平台提供了windeployqt工具,可在 D:\Qt\6.8.0\msvc2022_64\bin 下找到 windeployqt.exe。找到 Qt 项目的构建目录(对于 Qt Creator 而言默认目录名为build,对于 CLion 而言形如cmake-build-debug-visual-studio),将构建目录下的程序文件 MyApp.exe 复制到packages/com.vendor.product/data目录下,然后打开 Qt 6.8.0 (MSVC 2022 64-bit) 命令行,切换到构建目录下执行

windeployqt <path-to-app-binary>

或对于 Qt Quick 项目

windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

例如

windeployqt --qmldir qml ..\deploy\packages\com.vendor.product\data

部署完成后,执行

D:\Qt\Tools\QtInstallerFramework\4.8\bin\binarycreator.exe  -c config/config.xml  -r resources/additional.qrc -p packages <App-Installer-Name>

即可制作安装包。

Linux

对于 Linux 而言 Qt 目前没有提供官方的部署工具,本文采用cqtdeployer工具,可通过sudo snap install cqtdeployer安装。注:安装snap后可选将/snap/bin添加到PATH环境变量。
假设 Qt 项目的构建目录为 ~/YourApp/build/Desktop_Qt_6_8_0-Debug,QML 目录为构建目录下的qml目录。安装完成后,可以通过cqtdeployer getDefaultTemplate qif获取默认 QIF 配置模板,其中只包含一个config.xml文件和一个contorlScript.qs文件。默认目标目录targetDirDistributionKit。我们也可以将我们自己的 QIF 配置放在部署目录下,然后执行

/snap/bin/cqtdeployer -bin ~/YourApp/build/Desktop_Qt_6_8_0-Debug -qmlDir ~/YourApp/build/Desktop_Qt_6_8_0-Debug/qml -qmake /opt/Qt/6.8.0/gcc_64/bin/qmake
/snap/bin/cqtdeployer -bin ~/DistributionKit/bin -qmlDir ~/DistributionKit/qml qif <path-to-deploy> -name <App-Installer-Name>

以上选项中可指定

  • -binarycreator /opt/Qt/Tools/QtInstallerFramework/4.8/bin/binarycreator
  • qifConfig <path-to-deploy>/config/config.xml
  • -qifLogo <path-to-logo>
  • -qifPackages <path-to-deploy>/packages
  • -qifResources <path-to-deploy>/resources/additional.qrc
  • -qifStyle <path-to-deploy/config/style.qss
    也可分开执行
/snap/bin/cqtdeployer -bin ~/YourApp/build/Desktop_Qt_6_8_0-Debug -qmlDir ~/YourApp/build/Desktop_Qt_6_8_0-Debug/qml -qmake /opt/Qt/6.8.0/gcc_64/bin/qmake
cp -r DistributionKit/* <path-to-deploy>/packages/com.vendor.product/data
/opt/Qt/Tools/QtInstallerFramework/4.8/bin/binarycreator -c config/config.xml -p packages <App-Installer-Name>

即可完成部署与制作安装包。

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

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

相关文章

【大数据学习 | kafka】消费者的分区分配规则

1. 概述 上面我们提到过&#xff0c;消费者有的时候会少于或者多于分区的个数&#xff0c;那么如果消费者少了有的消费者要消费多个分区的数据&#xff0c;如果消费者多了&#xff0c;有的消费者就可能没有分区的数据消费。 那么这个关系是如何分配的呢&#xff1f; 现在我们…

【开发】关于Java中String与Integer的小小知识点(使用等号对比引用对象)

一个很简单的小知识点 我们都知道&#xff0c;如果使用对比包装类型或对象&#xff0c;那么比较的都是两者之间的地址&#xff08;指针或句柄&#xff09;&#xff0c;而非对象本身&#xff0c;那么且看下方的代码。 public class A {public static void main(String[] args)…

2025年山东省考报名流程图解

2025年山东公务员考试备考开始 为大家整理了从笔试到录用的全部流程&#xff0c;希望可以帮助到你们&#xff01;参考2024年山东省考公告整理&#xff0c;请以最新公告为准&#xff01; 一、阅读公告和职位表 二、职位查询 三、网上报名 四、确认缴费 五、网上打印准考证 六、参…

网络安全入门篇之详细学习路线

什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&…

什么是大数据治理?在企业数字化转型过程中有什么用?

建设背景 有效的数据治理不仅能够确保数据的安全和质量&#xff0c;还能为企业提供深入的业务洞察&#xff0c;推动决策制定和创新。数据治理是数字化转型的基础&#xff0c;是数据资源成为数据资产的基础&#xff0c;只有经过了数据治理&#xff0c;相应的数据资源才能产生价…

Kalshi PK Polymarket,谁更胜一筹

https://kalshi.com https://polymarket.com/ 在刚过去的2024 美大选中&#xff0c;这两个网站可谓风光无限。这两者究竟有何区别呢&#xff0c;今天咱们一起来扒一扒。 Kalshi与Polymarket主要有以下区别&#xff1a; 监管与合法性方面&#xff1a; Kalshi&#xff1a;经过美…

UI测试还在Selenium,难怪你会被淘汰

一、前言 在UI自动化测试的领域中&#xff0c;Selenium无疑是一颗璀璨的明星&#xff0c;它以其强大的浏览器自动化能力&#xff0c;长期以来一直是众多测试工程师的首选工具。它很经典&#xff0c;地位也毋庸置疑&#xff0c;但也是过去式了&#xff0c;现在我采用的自动化方…

基于ssm的网上药房管理系统的设计与实现(源码+LW+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java的ssm网上药房管…

godot——主题、Theme、StyleBox

我刚开始被这些术语吓到了&#xff0c;一直不敢去接触它们&#xff0c;都用的默认样式。现在好不容易有点思路了&#xff0c;记录下来。 下面看看怎么自定义样式。 1.先新建一个Theme 2.再次点击创建好的Theme 得到 图1 这样一个面板。&#xff08;看不懂没事&#xff0c;继…

如何利用Python API接口实战中高效地获取商品详情信息

在电商数据分析和商品信息集成领域&#xff0c;高效地获取商品详情信息是至关重要的。本文将介绍如何使用Python结合API接口&#xff0c;从淘宝/天猫平台获取商品详情信息&#xff0c;并提供实战代码示例。 一、理解API接口的重要性 API&#xff08;应用程序编程接口&#xff…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim&#xff1a; 1、对vim初步理解&#xff1a; 2、vim的模式&#xff1a; 3、进入与退出&#xff1a; 4、vim命令模式下的指令集&#xff1a; 移动光标&#xff1a; 删除&#xff1a; cv&#xff1a; 撤销&#xff1a; 其他&#xff1a; 5、vim底行模…

不支持UEFI的老显卡修改vBIOS进行支持

前段时间要在办公室玩恐怖黎明,但是联想自带的GT730实在是有点慢,后来闲鱼收了一张HD7750,虽然也是老掉牙,但是性能也有3成提升,聊胜于无吧.但是存在HD7750不支持UEFI的问题.具体表现为: 系统是win11未进系统时,什么都不显示,不能进BIOS.刚换卡未装驱动的时候,即使已经进入系统…

qt QWheelEvent详解

1、概述 QWheelEvent是Qt框架中用于处理鼠标滚轮事件的一个类。当用户滚动鼠标滚轮时&#xff0c;Qt会生成一个QWheelEvent事件&#xff0c;并将其发送到相应的窗口或控件。开发者可以通过重载窗口或控件的wheelEvent()方法来响应这个事件&#xff0c;并执行相应的操作&#x…

如何训练最懂您企业的AI助理?

随着人工智能技术的蓬勃发展&#xff0c;企业级AI助理已成为提升工作效率、优化客户服务体验的重要利器。这些智慧化的系统&#xff0c;通过模拟人类的认知功能&#xff0c;能够轻松应对复杂的数据分析、自动化繁琐的日常任务&#xff0c;甚至为企业决策提供有力支持。拥有一款…

2024网鼎杯web1+re2 wp

这两道题属于比较简单的&#xff0c;顺道说一下&#xff0c;今年的题有点抽象&#xff0c;web不是misc&#xff0c;re不是web的&#xff0c;也有可能时代在进步&#xff0c;现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了&#xff0c;进来疯狂找sql注入&#xff0c…

【Android 系统中使用CallStack类来追踪获取和操作调用栈信息】

Android系统CallStack类的使用 定义使用方法使用场景注意事项应用举例 定义 在 Android 系统中&#xff0c;CallStack 类是一个用于获取和操作调用栈信息的工具类。这个类通常用于调试和日志记录&#xff0c;以帮助开发者了解函数调用的顺序和位置。以下是您提供的代码片段的解…

Vue 组件通信-自定义事件(七)

一、组件自定事件概念 自己定义的事件&#xff0c;包含事件名&#xff0c;事件回调等&#xff0c;定义好之后去给组件使用。也是一种组件的通信方式&#xff0c;适用于子组件传递给父组件。 二、 组件自定义事件实现子传父 1、在父组件中给子组件绑定一个自定义事件 在子组件标…

解决Qt Creator调试“warning: GDB: Failed to set controlling terminal“

本文档详细介绍了在Qt环境中遇到GDB提示Failed to set controlling terminal错误时的解决方案&#xff0c;步骤包括勾选Run in Terminal选项。适合开发者在调试过程中遇到此类问题时参考。 &"warning: GDB: Failed to set controlling terminal: \345\257\271\350\25…

nginx 部署2个相同的vue

起因&#xff1a; 最近遇到一个问题&#xff0c;在前端用nginx 部署 vue&#xff0c; 发现如果前端有改动&#xff0c;如果不适用热更新&#xff0c;而是直接复制项目过去&#xff0c;会404 因此想到用nginx 负载两套相同vue项目&#xff0c;然后一个个复制vue项目就可以了。…

城镇保障性住房管理:SpringBoot技术探索

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…