C++常用的支持中文的GUI库Qt 6之三: Qt 6的项目的发布

news/2024/10/17 22:19:06/

C++常用的支持中文的GUIQt 6之三: Qt 6的项目的发布

本文接着上一篇“C++常用的支持中文的GUI库Qt 6之二:项目的结构、资源文件的使用” https://blog.csdn.net/cnds123/article/details/130741807介绍,并使用其中的例子。

程序代码能正确编译运行,就可以考虑项目的发布了。

发布 Qt 程序需要考虑多种因素。您需要了解目标平台的要求,了解如何编译和打包程序,并能够管理其依赖项和发布版本。

Qt Creator将项目源文件和编译生成的文件进行了分类存放。初学者常常找不到生成的可执行文件.exe在哪儿。

在Qt Creator中,生成的可执行文件(.exe文件)默认会放在项目的构建目录中。构建目录的位置可以在Qt Creator的项目设置中进行配置。

构建和运行(Build & Run)目录

Qt Creator将项目源文件和编译生成的文件进行了分类存放。构建目录用于存放此项目在编译过程中生成的文件,例如数据库文件、可执行文件等。

查看或修改构建目录

在Qt Creator中查看或修改项目的构建目录,参见下图,按照以下步骤操作:

打开Qt Creator并加载你的项目。

在左侧面板中,选择“Projects(项目)” 图标(通常显示为一个扳手图标)。

在“项目”选项卡中,根据实际情况查看或修改构建目录

保存更改后,下次构建时,项目将使用新的构建目录进行编译。

注意:修改构建目录会影响之前构建产物的存放位置,可能需要重新构建项目以确保之前的构建产物被更新。在某些情况下,可能需要执行清理操作(在顶部菜单栏上点击“构建”>“清理项目”),以防止因旧构建文件而导致的问题。

构建模式(构建版本)

Qt提供了三种不同的构建模式(构建版本):Debug、Profile和Release。这些模式涉及不同的编译选项和优化设置,用于满足开发过程中不同阶段的需求。

Debug(调试)模式:

Debug模式主要用于开发和调试应用程序。它使用额外的信息(如调试符号),使开发者能够更轻松地定位和解决代码问题。在Debug模式下,编译器通常不会执行任何优化操作,以确保代码的行为与预期一致。此配置下生成的可执行文件体积较大,运行速度较慢。而Debug模式下的项目可以结合调试器,在运行时进行断点调试、内存分析等操作。

Profile(性能分析)模式:

Profile模式类似于Debug模式,但包含了额外的性能分析工具(如性能计数器和跟踪器)。这些工具允许开发者检查应用程序的性能瓶颈和资源消耗。在Profile模式下,编译器可能会执行某些优化,以便更接近实际的运行环境。然而,这种模式仍然包含调试信息,因此可执行文件体积仍然较大。Profile模式适用于需要对代码进行性能分析和调整的场景。

Release(发布)模式:

Release模式用于准备应用程序的最终版本。在Release模式下,编译器将执行各种优化操作,以提高应用程序的执行速度和减小文件大小。这种模式下的可执行文件不包含调试信息,因此体积较小,运行速度较快。然而,由于缺少调试信息,使用调试器定位问题变得困难。Release模式通常用于生成可以分发给用户的应用程序版本。

在Qt Creator中,你可以从构建模式下拉菜单中选择需要的构建模式(通常位于左下角)。选择合适的模式后,点击“构建”图标进行编译。请注意,在切换构建模式时,确保对应的构建目录已被正确设置。

将想要发布的应用程序,使用release模式下编译,然后生成可执行文件。

使用Release模式进行编译

请注意,在使用Release模式编译应用程序时,确保你已正确设置了项目,并解决了所有编译警告和错误。

在Qt Creator中使用Release模式进行编译,请按照以下步骤操作:

打开Qt Creator并加载你的项目。

在左下角,找到构建模式切换器。它通常显示为一个下拉菜单,可以在Debug、Profile和Release模式之间切换。

从下拉菜单中选择“Release”模式。此时,Qt Creator将使用Release模式设置对项目进行编译。

若要开始编译,点击顶部工具栏上的绿色播放图标旁边的锤子图标(或者按快捷键Ctrl+B或Cmd+B,或从顶部菜单栏选择“构建”>“构建项目”)。

Qt Creator将使用Release模式进行编译。编译完成后,你可以在构建目录下的"release"子文件夹中找到生成的可执行文件。

在构建目录下的"release"子文件夹中找到生成的可执行文件,我这里是ch01.exe,先不要高兴太早,往下看。

使用QT Creator创建的项目,可以在QT Creator中启动运行,但在"release"子文件夹中双击ch01.exe,文件,却提示系统错误:

怎么办?往下看,

最简单的发布

手工建立一个文件夹如MyQt,将Qt安装目录下 6.2.4\mingw_64 (其中6.2.4是Qt版本号,据你的实际情况而定)文件夹中的bin文件夹和plugins文件夹复制到MyQt文件夹中,然后将ch01.exe复制到MyQt文件夹这的bin文件夹,就可以将MyQt文件夹给他人用了。其中ch01.exe可以改名。将这个文件夹发给一个没有安装过Qt 的电脑,也可以打开。不过这样发布包含的无用的文件较多,也不太专业。

下面介绍使用Qt的windeployqt工具发布

windeployqt.exe是Qt自带的Windows平台发布工具,用于创建应用程序发布包,它可以自动为一个应用程序复制其运行所需的各种库文件、插件。官方介绍Qt for Windows - Deployment | Qt 6.5

在你认为合适的位置新建一个文件夹,将“release”文件夹下的.exe文件复制到新建的文件夹中

开始菜单中打开Qt命令行终端界面

【在Qt命令行终端中输入

windeployqt.exe -h

可以查看命令帮助】

命令行中输入

windeployqt.exe 应用程序完整路径

如果应用程序路径中包含空格,需要用双引号将整个路径字符串包裹起来。

回车即可执行发布命令。输出界面如下图所示:

等待完成后,进入到应用程序目录可以看到,目录中增加了很多依赖库和数据文件。点击这个目录中你的.exe就可以直接运行了。将这个文件夹发给一个没有安装过Qt 的电脑,看是否可以打开。若没问题就可以这样发布了。或者更进一步制作安装文件了。有很多制作安装文件的软件,如Inno Setup 是一个免费的 Windows 安装程序制作软件,还可以使用官方的Qt Installer Framework工具在此就不多说了。

Qt Installer Framework框架制作安装包

Qt提供的Qt Installer Framework,一组工具和实用程序,用于创建一次安装程序。

官方下载:Index of /official_releases/qt-installer-framework

官方文档:Tutorial: Creating an Installer | Qt Installer Framework Manual

附录

Qt 6.2.1 官方文档编制 (中文人工翻译) http://qt6.digitser.top/
Qt Creator使用教程的简单说明https://www.zhangshengrong.com/p/Ap1Zey3AX0/
Qt应用程序的发布(windeployqt)https://blog.51cto.com/u_15346415/5172452


http://www.ppmy.cn/news/79837.html

相关文章

跟我看 Microsoft Build 2023

又是一年一度的 Microsoft Build 了,你有和我一样熬夜看了吗?如果没有,那么你就错过了一场精彩的技术盛宴。本次的 Microsoft Build ,有非常多的干货,围绕打造 Copilot 应用展开。我会将基于 Data AI 比较重要的内容列…

分析| Flutter 3.10版本有哪些变化?

Flutter是Google推出的一款用于构建高性能、高保真度移动应用程序、Web和桌面应用程序的开源UI工具包。Flutter使用自己的渲染引擎绘制UI,为用户提供更快的性能和更好的体验。Flutter还提供了丰富的构建工具、库和插件,使开发人员能够更快地构建应用程序…

【统计模型】瑞典生育率现状与影响因素分析

目录 瑞典生育率现状与影响因素分析 一、研究目的 二、数据来源和相关说明 三、描述性分析 3.1 样本描述 3.2 数据可视化 四、数学建模 4.1 模型建立 4.2 模型结果 (1)全模型A (2)全模型B (3)全…

UnityVR--ResourceManager--资源管理

目录 简介 加载资源的几种方式 资源加载的管理器Resload.cs ResLoad类的应用举例 简介 这里记录一个资源管理工具集,提供一些方法将一些Object、Prefab直接从Assets文件夹中加载到场景中。 加载资源的几种方式 在项目中我们经常需要使用一些随时取用的东西&…

STL --- 2、容器 (7)queue

目录 1、std::queue 的基本操作 2、std::queue 队列的应用场景 3、std::queue 实例 队列(Queue)是一种先进先出(FIFO)的数据结构,类似于现实生活中排队等待服务的场景。队列中的元素只能在队列的末尾添加&#xff0…

局部最小值问题

局部最小值问题 自写&#xff1a; // arr 相邻的数不相等&#xff01; 返回一个局部最小的下标public static int oneMinIndex(int[] arr) {if(arr null || arr.length 0) {return -1;}if(arr.length 1) {return 0;}int L 0;int R arr.length - 1;if(arr[L] < arr[L 1…

ARM的状态传送器指令、软中断指令与协处理指令(软中断具体实现)

1.状态寄存器传送指令: 作用&#xff1a;访问&#xff08;读写&#xff09;CPSR寄存器 CPSR寄存器结构图&#xff1a; 前八位的作用&#xff1a; Bit[4:0] &#xff1a;不同的电平组合表示不同的模式&#xff0c;[10000]User [10001]FIQ [10010]IRQ [10011]SVC …

分布式运用之ELK企业级日志分析系统

1.ELK的相关知识 1.1 ELK的概念与组件 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch&#xff1a; 是基于Lucene&#xff0…