Qt程序的编译和发布(实验报告)

2023-11-19

实验 1 编译和发布 Qt 程序

目的与要求

  1. 掌握创建 Qt 程序的方法
  2. 掌握发布 Qt 程序的方法
  3. 学会为 Qt  程序添加应用程序图标
  4. 了解 Qt 发布需要的 DLL 动态库文

实验准备

  1. 搭建好 Qt 开发环境
  2. 了解 Qt Creator 设计模式的基本使用方法
  3. 了解 DLL 动态库文件的作用
  4. 了解 Debug 版本和 Release 版本的区别

实验内容

1.创建 hello world 程序

(1)运行 Qt Creator,打开“文件→新建文件或项目”菜单项(也可以直接按下 Ctrl+N 快捷键),在选择模板页面选择 Application 中的“Qt Widgets Application”一项,然后单击 “Choose”按钮,如图 2.1 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_17,color_FFFFFF,t_70,g_se,x_16

图 2.1  选择模板

(2)输入项目信息。在“项目介绍和位置”页面输入项目的名称为 helloworld,然后单击创建路径右边的“浏览”按钮选择源码路径,例如这里是“E:\app\src\02\2-1”。如果选中了这里的“设置默认的项目路径”,那么以后创建的项目会默认使用该目录,如图 2.2 所示。单击“下一步”进入下个页面。(注意:项目名和路径中都不能出现中文。)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_18,color_FFFFFF,t_70,g_se,x_16

图 2.2 项目介绍与位置

(3)选择构建套件。这里显示的 Desktop Qt 5.6.1 MinGW 32bit 就是在实验 1 看到的构建套件,下面默认为 Debug 版本和 Release 版本分别设置了两个不同的目录,如图 2.3 所示。然后单击“下一步”。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_18,color_FFFFFF,t_70,g_se,x_16

  图 2.3  选择构建套件

(4)输入类信息。在“类信息”页面中创建一个自定义类。这里设定类名为 HelloDialog, 基类选择 QDialog,表明该类继承自 QDialog 类,使用这个类可以生成一个对话框界面。这时下面的头文件、源文件和界面文件都会自动生成,保持默认即可,如图 2.4 所示。然后单击“下一步”。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_15,color_FFFFFF,t_70,g_se,x_16

图 2.4 类信息

(5)设置项目管理。在这里可以看到这个项目的汇总信息,还可以使用版本控制系统,这个   项目不会涉及,所以可以直接单击“完成”按钮完成项目的创建。如图 2.5 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_15,color_FFFFFF,t_70,g_se,x_16图 2.5 项目管理

(6)项目建立完成后会直接进入编辑模式。界面的右边是编辑器,可以阅读和编辑代码。如果觉得字体太小,可以使用快捷键 Ctrl +“+”(即同时按下 Ctrl 键和+号键)来放大字体,使用 Ctrl + “-”(减号)来缩小字体,也可以使用 Ctrl 键+鼠标滚轮来缩放字体。使用 Ctrl+0(数字)可以使字体还原到默认大小。在左边侧边栏,罗列了项目中的所有文件,如图2.6所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_20,color_FFFFFF,t_70,g_se,x_16

 图 2.6 编辑模式

(7)在 Qt Creator 的编辑模式下双击项目文件列表中界面文件分类下的 hellodialog.ui 文件,这时便进入了设计模式,如图 2.7 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_20,color_FFFFFF,t_70,g_se,x_16

图 2.7  设计模式

(8)从部件列表中找到 Label(标签)部件,然后按着鼠标左键将它拖到主设计区的界面上,再双击它进入编辑状态后输入“Hello World!  你好 Qt!”字符串。如图 2.8 所示

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_9,color_FFFFFF,t_70,g_se,x_16

图 2.8 添加标签部件

2.运行并发布程序

(1)可以使用快捷键 Ctrl+R 或者通过按下左下角的运行按钮来运行程序。这时可能会弹出“保存修改”对话框,这是因为刚才在设计模式更改了界面,而 hellodialog.ui 文件被修改了但是还没有保存。现在要编译运行该程序,就要先保存所有文件。可以选中“构建之前总是   先保存文件”选项,以后再运行程序时就可以自动保存文件了。

(2)程序运行效果如图 2.9 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_9,color_FFFFFF,t_70,g_se,x_16

图 2.9 Helloworld 程序运行效果

(3)要发布程序时,要使用 release 版本。在 Qt Creator 中对 helloworld 程序进行 release 版本的编译,需要在左下角的目标选择器(Target selector)中将构建目标设置为 Release,如图 2.10 所示,然后单击运行图标编译运行程序。

20210922195017424.jpeg

图 2.10 目标选择器

(4)编译完成之后再看项目目录中:

E:\app\src\02\2-1\build-helloworld-Desktop_Qt_5_6_1_MinGW_32bit-Release 文件夹的 release

目录中,已经生成了 helloworld.exe 文件。

(5)在桌面上新建一个文件夹,重命名为“我的第一个 Qt 程序”,然后将 release 文件夹中的 helloworld.exe 复制过来, 再去 Qt 安装目录的 bin 目录中将 libgcc_s_dw2-1.dll 、libstdc++-6.dll、libwinpthread-1.dll、Qt5Core.dll、Qt5Gui.dll 和 Qt5Widgets.dll 这 6 个文件复制过来。另外,还需要将 C:\Qt\Qt5.6.1\5.6\mingw49_32\plugins 目录中的 platforms 文件夹复制过来(不要修改该文件夹名称),里面只需要保留 qwindows.dll 文件即可。

3.设置应用程序图标

在程序发布时,一般会给可执行文件设置一个漂亮的图标。下面是在 Windows 系统上设置应用程序图标的方法。

(1)创建.ico 文件。将 ico 图标文件复制到工程文件夹的 helloworld 目录中,重命名为“myico.ico”。完成后 helloworld 文件夹中的内容如图 2.11 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_14,color_FFFFFF,t_70,g_se,x_16

图 2.11 helloworld 目录

(2)修改项目文件。在 Qt Creator 中的编辑模式双击helloworld.pro 文件,在最后面添加下面一行代码,如图 2.12 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_15,color_FFFFFF,t_70,g_se,x_16

 图 2.12 编辑工程文件

(3)运行程序。如图 2.13 所示,可以看到窗口左上角的图标已经更换了。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_9,color_FFFFFF,t_70,g_se,x_16

图 2.13 更换了图标的程序运行界面

(4)查看一下 release 文件夹中的文件,可以看到现在 exe 文件已经更换了新的图标,如图

2.14 所示。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54ix5ZCD5aW257OW55qE5bCP55m95YWU,size_14,color_FFFFFF,t_70,g_se,x_16

 图 2.14 更换了图标后的 release 目录

(6)现在可以将更改了图标的 helloworld.exe 文件复制到程序发布目录,然后就可以将程序发布目录压缩打包进行发布了。发布的程序可以在没有安装 Qt 的 Windows 系统上运行。

来个思考题:Qt 程序从编写、编译、运行,到最后的发布,整个流程是怎样的

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

Qt程序的编译和发布(实验报告) 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 按成员序列化

    我已经实现了template
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • Office2016简体中文专业版32/64

    仅供参考 链接 https pan baidu com s 1QklpJzxzWDuFnsXX 6z9SA 提取码 4kd0
  • 黑盒测试与白盒测试的定义与区别

    白盒测试 是指实际运行被测程序 通过程序的源代码进行测试而不使用用户界面 这种类型的测试需要从代码句法发现内部代码在算法 溢出 路径和条件等方面的缺点或者错误 进而加以修正 黑盒测试 又称功能测试 数据驱动测试或基于规格说明的测试 是通过使
  • reactnative环境搭建-windows

    一 安装依赖 1 Node 以下为两种安装方式 1为基本安装 2为通过管理工具安装 1 按照教程步骤安装指定版本的node Node js 安装配置 注意 Node 的版本应大于等于 14 默认安装在C盘 如果自定义安装了其他盘需要配置环境
  • OpenCV入门【C++版】

    OpenCV基础入门 C 语言 Chapter1 读取图片 视频 摄像头 从文件读取图片 从文件读取视频 读摄像头 Chapter2 基础函数 Chapter3 调整和剪裁 Chapter4 绘制形状和文字 Chapter5 透视变换 Ch
  • Logback 自定义Appender发送预警

    1 自定义Appender 目的 接收日志消息 现将日志通过http接口发送到预警服务 package com test service appender import ch qos logback classic spi LoggingE
  • Unity -Input

    Unity Input详解 Unity中的InputManager输入控制器 Input属性方法详解 属性 方法 Unity中的InputManager输入控制器 Name 按键名 该键的名称 可以在脚本编程中直接引用他 比如 Input
  • 硬件基础之集成运放

    一 技术理论 1 集成电路 集成电路是采用专门的制造工艺 在半导体单晶硅上 把晶体管 场效应管 二极管 电阻和电容等元器件以及它们之间的连线所组成的电路制作在一起 使其具有特定功能的芯片 2 集成运放 集成运放 全称集成运算放大器 是具有超
  • 部署多台服务器,动态配置前端请求的ip地址

    需求 前后端分离的项目 需要部署多台服务器 但是不想频繁修改前端配置的ip地址 故需要需要动态配置 解决 发送请求时的url默认获取服务器的ip function getBaseUrl const url location href toS
  • 深入剖析Nginx日志:常用分析技巧汇总

    前言 本来只是想写一篇Nginx日志的常用统计分析命令填充一下线上文档 虽然有点用但是觉得光写命令 文档太水了 于是就顺便总结一下 在nginx或web服务中 需要有哪些进行分析的内容以及为什么有这些需求 ps 统计命令的原因 在于不是每个
  • 杨桃的Python进阶讲座18——数组array(八)如何从一维数组扩展为二维数组以及再次降为一维数组

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 用reshape 函数将一维数组升维成二维数组 首先我们由一个列表转换为NpArray数组 gt g
  • git 提交代码时,提示输入用户名和密码,不知道用户名和密码是啥

    最近在跟小伙伴一起做小项目玩 之前clone代码时都是ssh 这次用的是https 提交代码遇到问题 在网上没有查到解决问题的办法 所以在这里记录以下这个问题的解决办法 后续有时间要 熟练掌握 git的使用方法 当小伙伴再遇到问题时 就可以
  • vue中如何引入jquery详解

    用vue cli脚手架工具构建项目成功后 当需要引入JQ 可用以下方法 1 首先在package json里的dependencies加入 jquery 3 2 1 2 在终端里输入npm install jquery save dev 当
  • unity 读取和写入Excel中文出现乱码解决方法

    在编辑器中读取和写入中文一切正常 发布出来只要是中文就会出现乱码 解决方法 将C Program Files Unity Editor Data Mono lib mono unity 目录下的I18N dll和I18N CJK dll复制
  • [转载]搜索引擎技术介绍

    转载声明 http backend blog 163 com blog static 202294126201252872124208 引言 早些时候分享过一份关于搜索引擎技术的PPT 这篇文章基本上是基于原来框架 在内容上做了一些改进和扩
  • 清华镜像pip安装命令

    在ubuntu系统下 pip3 install 安装包的名字 i https pypi tuna tsinghua edu cn simple 永久设置 pip install pip U pip config set global ind
  • 哈工大 csapp lab5

    实验报告 实 验 五 题 目 LinkLab 链接 专 业 计算机科学与技术 学 号 190110812 班 级 7 学 生 刘新晨 指 导 教 师 吴锐 实 验 地 点 G707 实 验 日 期 2021 5 16 计算机科学与技术学院
  • Linux 常用命令介绍

    文章目录 1 初级 1 pwd命令 2 cd命令 3 ls命令 实例练习 2 中级 1 Linux文件操作 1 创建文件 2 删除文件 2 Linux文件夹操作 1 创建文件夹 2 删除文件夹 3 Linux文件和文件夹拷贝 4 Linux
  • 使用 cloc 统计你的代码量

    转自 使用 cloc 统计你的代码量 今天发现一个特别好用的工具 cloc 可以用它统计代码的行数 它可以识别多种开发语言 并在计算的时候忽略掉注释和空行 我记得我上次申请软件著作权的时候 申请表格中要求提交代码量 当时为了计算行数 我写了
  • 51单片机——LED点阵屏

    51单片机 LED点阵屏 LED点阵屏 LED点阵屏原理 74HC595串转并芯片 源代码 例程一 静态笑脸 效果展示 例程二 笑脸 gt 平脸 gt 哭脸 效果展示 LED点阵屏 c51的LED点阵屏其实就是一个8 8像素的屏幕 一共有6
  • Qt程序的编译和发布(实验报告)

    实验 1 编译和发布 Qt 程序 目的与要求 掌握创建 Qt 程序的方法 掌握发布 Qt 程序的方法 学会为 Qt 程序添加应用程序图标 了解 Qt 发布需要的 DLL 动态库文 实验准备 搭建好 Qt 开发环境 了解 Qt Creator