Qt打包程序详解(适用于Windows平台)

2023-05-16

已剪辑自: http://c.biancheng.net/view/vip_9665.html

分享 Qt 程序(项目)的方式无非两种,要么直接分享程序的源代码,要么分享程序生成的可执行文件。

和直接分享源码相比,大多数人会选择后者。但遗憾地是,Qt Creator 默认以动态链接的方式生成可执行文件,该文件无法独立运行,必须为其提供所需的动态链接库。也就是说,只分享 Qt Creator 生成的可执行文件是不行的,必须将运行所需的动态链接库一起分享,可执行文件才能在他人的电脑上正常运行。

对 Qt 程序进行打包,指的就是找到可执行文件运行需要的所有动态库文件,并将它们统一存放到指定的空文件夹里。本节以编写完成的学生信息管理系统为例,给大家讲解“怎样在 Windows 平台上打包一个 Qt 程序”。

为可执行文件添加图标

《Qt实现学生信息管理系统》一节讲了如何给程序中的窗口添加 icon 图标。打包 Qt 程序之前,我们也可以给可执行文件设置 icon 图标。

以学生信息管理系统为例,默认生成的可执行文件如图 1a) 所示,添加 icon 图标后的可执行文件如图 1b) 所示。

img
图 1 设置 icon 图标

为可执行文件添加 icon 图标的方法很简单,将事先准备好的 icon 图标拷贝到程序对应的文件夹中,然后在 pro 工程文件内添加如下指令:

RC_ICONS += logo.ico

其中,logo.ico 是图标文件的名称。重新对程序进行编译、链接,最终生成的就是带 icon 图标的可执行文件。

Qt程序打包

打包 Qt 程序,通常选用以 release 模式生成的可执行文件。和 debug 模式相比,release 模式生成的可执行文件体积更小,运行效率更快。

Qt Creator 默认以 debug 模式生成可执行文件,如下图所示,可以手动修改 Qt Creator 以 release 模式生成可执行文件:

img
图 2 以 release 模式生成可执行文件

选择“Release”之后,再次运行程序,生成的可执行文件可以在下图所示的路径中找到:

img
图 3 可执行文件的存储位置

找到可执行文件之后,将其拷贝到一个空的文件夹,比如笔者将其拷贝到了新建的 D:\StuInfoFile 文件夹中,如下图所示:

img
图 4 将可执行文件拷贝到新建的文件夹内

此时的 StuInfoFile.exe 是无法运行的,双击它系统会提示类似“找不到 xxx.dll”的错误信息。

在“开始”中找到 Qt 命令行程序并打开,如下图所示:

img
图 5 Qt命令行程序

在命令行中,先执行 “cd D:\StuInfoFile” 命令进入 StuInfoFile 文件夹,然后再执行 “windeployqt StuInfoFile.exe” 命令。windeployqt 是 Qt 提供的 Windows 平台打包工具,它能找到 StuInfoFile.exe 可执行文件需要的所有动态链接库,并将它们拷贝到当前文件夹中。

成功执行命令之后,StuInfoFile 文件夹内会增加很多文件夹和文件(如下图所示),这些都是 StuinfoFile.exe 执行所需要的。

img
图 6 打包后的 StuInfoFile 文件夹

再次双击 StuInfoFile.exe,如果它可以成功执行,表明打包操作是成功的。我们可以直接将 StuInfoFile 文件夹分享给他人,只要是 Windows 平台,都可以直接点击运行 StuinfoFile.exe 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt打包程序详解(适用于Windows平台) 的相关文章

  • 如何在 Ubuntu VirtualBox 中运行 Meteor 应用程序并使用 Windows 主机上的编辑器进行编辑?

    我希望在运行 Ubuntu 的 virtualbox 来宾中运行一个用于开发目的的流星服务器 该项目将位于主机上的一个文件夹内 该文件夹将共享给来宾 该文件夹本身位于 Dropbox 文件夹内 这样我可以在多个虚拟机和工作站之间共享开发 但
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 如何使用 Win32 API 与 com 端口 (RS232) 通信

    我正在尝试使用 win32 API 与 com 端口对话 我找到了这个http www robbayer com files serial win pdf http www robbayer com files serial win pdf
  • 仅在单个端口 8080 上转发到本地主机(Windows)可能吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我知道如何在 Windows 上使用 xampp 设置本地网络服务器 我在主机文件 c windows system32 drivers etc ho
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 更改当前工作目录 VS13?

    如本文所述post https stackoverflow com questions 11979632 c sdl why does sdl loadbmp return null我调试 SDL 程序时的工作目录是相对于 vcproj 而
  • 如何修复圆角按钮中边框和背景之间的空白?

    我为我的 WPF 应用程序创建了一个简单的按钮模板
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 批处理脚本 - IF EXIST 复制到 %localappdata% 错误

    我似乎被批处理脚本困住了 需要一些帮助 基本上我需要检查文件是否存在于文件夹中 localappdata 如果确实如此 则覆盖该文件 如果没有放置在不同的位置 那么目前它的内容如下 IF EXIST localappdata foldern
  • 使用 Windows 套接字的 WriteFile 返回无效参数错误

    我已经在 Windows 套接字上苦苦挣扎了两天 无法像在 Linux 中那样只使用写入套接字 我想编写自己的 shellcode 并且正在研究如何将 stdout stdin 重定向到套接字句柄 这就是我的演奏的来源 如果有必要 我使用
  • Windows 等效的系统配置目录

    我正在 Ruby 中开发一个 CLI 应用程序 我希望允许通过标准配置文件级联在 Unix 中进行配置 etc appnamerc appnamerc 然而 该应用程序也应该在 Windows 环境中运行 我不确定将像这样的文件放在哪里 e
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • “以管理员身份运行”时的 Windows 批处理文件起始目录

    我有一个位于目录中的批处理文件 也必须从那里运行 因为它会更新该目录中的文件 这工作得很好 除非用户以管理员身份运行批处理文件 Vista 上需要 那么起始目录是C Windows System32 有什么办法仍然能够知道批处理文件是从哪个
  • PC 相当于 Coda 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Docker 警告:无法从守护进程获取默认注册表端点

    在 Windows 10 上 当我调用 docker 命令时 docker pull mongo windowsservercore 我得到以下输出 Warning failed to get default registry endpoi
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 按名称显示进程的命令行

    我在cmd中使用以下命令来获取进程命令行 它提供了所有流程的详细信息 WMIC OUTPUT C ProcessList txt PROCESS get Caption Commandline Processid 我想在记事本中按名称获取特
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来

随机推荐

  • 数十种嵌入式 C 语言代码优化的经验和方法

    文章目录 简介声明哪里需要使用这些方法 xff1f 整形数除法和取余数合并除法和取余数通过2的幂次进行除法和取余数取模的一种替代方法使用数组下标全局变量使用别名变量的生命周期分割变量类型局部变量指针指针链条件执行布尔表达式和范围检查布尔表达
  • 汽车电子国际标准现状与趋势

    已剪辑自 https mp weixin qq com s vLgnrFPtDPglwde1TZUHSQ 在汽车电子系统发展的早期 xff0c 汽车电子基础软件是没有统一标准的 xff0c 各个 OEM Tier1 Tier2 等厂商针对不
  • Linux多线程服务器编程(陈硕)学习总结

    这本书确实是学习多核时代采用现代C 43 43 编写多线程程序的好书 xff0c 下面是学习总结 xff1a 第一章 线程安全的对象生命期管理 对象的创建很简单 xff0c 但是不要在构造期间泄漏this指针 xff0c 比如不要在构造函数
  • 详解 Modbus 通信协议(清晰易懂)

    文章目录 已剪辑自 https mp weixin qq com s dvo1l1GgJ2DtIHnPK5E1tA 本文总结关于 Modbus 相关的知识 xff0c 浅显易懂 xff0c 旨在对 Modbus 有一个很直观的了解 如有错误
  • RTOS应用中的几种调度策略

    从前后台架构的软件开发过渡到使用实时操作系统 RTOS 可能是一项困难的工作 但使用RTOS有许多优势 xff0c 例如简化应用集成 xff0c 支持任务抢占调度 xff0c 当开发人员使用复杂的32位微控制器 xff0c 且可以获取足够的
  • 几款非常棒的使用文本来进行图形化注释的工具

    https mp weixin qq com s NX8feH UPE7oegM7U9W4GA 说明 xff1a 1 程序代码里面非常好的注释方式 2 相关网站 xff1a xff08 1 xff09 https metacpan org
  • 解决Excel打开UTF-8编码CSV文件乱码的问题

    最近在用QT读写CSV文件 xff0c 发现将数据写入到CSV文件中 xff0c 使用记事本打开文件是正常的 xff0c 使用Excel打开 xff0c 中文是乱码的 xff0c 下面把原因和解决方法记录一下 问题产生的原因 为什么exce
  • Windows下查看端口占用情况

    编程的时候经常发现我们需要使用的端口被别的程序占用 xff0c 这个时候需要清楚查看是哪个程序占用了端口 xff0c 用且清除了这个进程 xff01 1 开始 gt 运行 gt cmd xff0c 或者是window 43 R组合键 xff
  • 【C进阶】同事用void把我给秀翻了!

    2 简单认识一下void 今天跟大家介绍的知识是C语言中的void关键字的用法 xff0c void在大部分小伙伴的程序中都只是用于函数无参数传入 xff0c 或者无类型返回 然而我们平时所定义的变量都会有具体的类型 xff0c int x
  • 如何降低代码圈复杂度

    已剪辑自 https mp weixin qq com s biz 61 MzI2MTE4Nzk5MA 3D 3D amp mid 61 2247483685 amp idx 61 1 amp sn 61 26072d6a41ed9abef
  • 嵌入式开发:周期调度和代码执行时间理解

    已剪辑自 https mp weixin qq com s gaT7D1IgkBxxEOj DNaLPw 汽车嵌入开发中 xff0c 我们常常听到这样的名词 xff1a 1ms Task 5ms Task 10ms Task 试问 xff1
  • C语言中,实现函数宏的三种方式

    已剪辑自 https blog csdn net qq 35692077 article details 102994959 1 函数宏介绍 函数宏 xff0c 即包含多条语句的宏定义 xff0c 其通常为某一被频繁调用的功能的语句封装 x
  • 代码是如何控制硬件的?

    已剪辑自 https mp weixin qq com s UDbxTfAMLAWE8LjUiqGUBQ 先说代码 xff1a 我们是用电脑的键盘来输入的指令 xff0c 每一个指令都对应一个ASCII码 xff0c 而这里的ASCII码就
  • 使用Realsense D435相机在ROS Kinetic中跑通ORB-SLAM2

    文章中不足 xff0c 错误的地方欢迎大家批评指正 xff0c 如果哪步遇到了问题 xff0c 我尽力为你解答 皱眉 这个文章主要是想记录当时配环境的步骤 xff0c 以防以后再配忘了某步 目录 使用配置主要步骤安装基于ROS使用RealS
  • libc6-dev: 依赖: libc6 (= 2.27-3ubuntu1.3) 但是 2.31-0ubuntu9.1 正要被安装...

    libc6 dev 依赖 libc6 61 2 27 3ubuntu1 3 但是 2 31 0ubuntu9 1 正要被安装 参考链接 xff1a https blog csdn net WU2629409421perfect articl
  • Debug模式和Release模式有什么区别?

    已剪辑自 https mp weixin qq com s 4iiB48m30p4 egKBD3QY3A 张爱玲曾说过 xff1a 开发过程就是个玄学 有时候 xff0c 程序在Debug模式下运行的好好的 xff0c 一Release就c
  • 同样是软件开发,为什么没有嵌入式软件架构师

    已剪辑自 https mp weixin qq com s mKQ d8mfau JB04v coWg 大家好 xff0c 今天分享一篇关于嵌入式软件架构师的文章 xff0c 文中的 我 为作者本人 希望对从事嵌入软件开发的你有所启发 我从
  • Qt QTableWidget表格控件的用法(非常详细)

    已剪辑自 http c biancheng net view vip 9657 html QTableWidget 是 Qt 提供的一种表格控件 xff08 如图 1 所示 xff09 xff0c 类似于我们经常使用的 Excel 表格 x
  • Qt编程涉及的术语和名词

    已剪辑自 http c biancheng net view 3871 html 本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字 xff0c 它们不一定专属于 Qt xff0c 在其它的 C C 43 43 开发过程中也会使用到
  • Qt打包程序详解(适用于Windows平台)

    已剪辑自 http c biancheng net view vip 9665 html 分享 Qt 程序 xff08 项目 xff09 的方式无非两种 xff0c 要么直接分享程序的源代码 xff0c 要么分享程序生成的可执行文件 和直接