四、Qt 的第一个demo

在上一篇章节里《三、Qt Creator 使用》,我们介绍了如何使用Qt Creator创建一个简单的带窗体的demo,在这一章节里,我们详细讲解一下这个demo的文件组成,及主函数,并在UI上加一些控件,实现一些简单的功能。

一、文件组成

很多同学对上一篇章节里《》创建的demo的文件组成不太了解,请看下图。

我们创建一个工程项目后,会在Test2文件夹下生成以下文件:

其实大家可能通过类型里的注释已经看出来区别了,有过C++基础的同学也应该很熟悉这个组成结构。

main.cpp 主函数代码文件(程序入口点)

mainwindow.cpp 主窗体代码文件

mainwindow.h 主窗体头文件

mainwindow.ui 主窗体文件(UI设计 控件)

Test2.pro 工程项目文件,双击此文件关联到Qt Creator,即打开Qt Creator

Test2.pro.user 工程项目的配置文件(编译器的配置等)

下边我们双击Test2.pro 打开 Qt Creator,点击左侧的 Test2.pro 工程文件,可以看到整个项目的组成。

二、主函数

接下来我们点击左侧项目树中的 Sources -> main.cpp进入到项目的主函数代码中。

有C++或C基础的同学会知道,一段代码想要运行,必须要有一个主函数,下图中右侧int main(int argc,char *argv[])是本项目的主函数入口。

让我逐行解释:

#include "mainwindow.h":这一行包含了名为 "mainwindow.h" 的头文件。通常,这个头文件包含了 MainWindow 类的声明,其中可能定义了主窗口的界面和功能。

#include :这一行包含了Qt框架的 QApplication 类的声明。QApplication 是Qt应用程序的主要类,负责处理应用程序的控制流和事件处理。

int main(int argc, char *argv[]):这是main函数的定义,是程序的入口点。argc 是命令行参数的数量,argv 是指向命令行参数字符串数组的指针。

QApplication a(argc, argv);:在这里创建了一个 QApplication 对象 a,用于管理应用程序的整个生命周期。

MainWindow w;:创建了一个 MainWindow 对象 w,这是应用程序的主窗口。当然我们也可以调用其他的窗体,比如在主窗体显示前,需要显示登录窗体,那么就在w.show之前调用登录窗体,并做逻辑判断,关于登录窗体我们会在以后的章节中介绍。如下图所示:

w.show();:通过调用 show() 方法,显示了主窗口。

return a.exec();:启动应用程序的事件循环,等待事件的发生。a.exec()会一直运行,直到应用程序被关闭。返回值是应用程序的退出码。

以上是一个标准的Qt框架应用程序的主函数,负责创建应用程序对象、主窗口对象,并启动应用程序的事件循环。在事件循环中,Qt会监听和处理用户输入、系统事件等,并根据这些事件执行相应的操作。

三、主窗体

再介绍完主函数后,大家应该能理解了主函数与主窗体及整个应用程序之间的关系。下边我们详细介绍主窗体。

我们在新建每一个QWidget或QDialog时,都会自动生成三个文件

mainwindow.cpp 主窗体代码文件

mainwindow.h 主窗体头文件

mainwindow.ui 主窗体文件(UI设计 控件)

分别对应下图中的位置,现在我们打开mainwindow.cpp 主窗体代码文件,默认会有构造函数MainWindow()和析构函数~MainWindow(),这两个函数的区别是,一个是开门的,一个是关门的。开门能用到的东西都写到构造函数中,如UI的初始化,关门需要将无用的资源释放,如指针变量、本窗体对象。

mainwindow.h 主窗体头文件,新建的函数、变量,需要在主窗体中声明,在代码文件中实现。

四、添加控件

下边我们双击左侧的mainwindow.ui 主窗体文件,打开主窗体的UI文件,进行UI设计。

从左侧的控件列表中,鼠标左键单击 Push Button后不要松开 ,通过拖拽的方式,拖到右侧的窗体面板中,松开鼠标左键,按钮就添加成功了。

在按钮上双击,可以修改按钮中的文本,也可以通过右下角的按钮属性列表修改按钮中的文本。

接下来我们通过以上的方式,添加文本框和标签页到窗体中。

五、添加按钮事件

接下来我们实现一个小功能,通过单击按钮给文本框中赋值。

鼠标右键单击按钮,选择“转到槽”。

选择clicked(),并点击 ok

Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。

我们在此处写代码到ui->时,会自动列出UI下所有控件的名称,包括 刚才添加的文本框的名称,如果没有自动列出,也可以先编译一下,因为刚才在UI中添加的文本框控件还没有和对应编译生成和moc_*文件对应,所以可以先用Ctrl+B编译一下程序,编译成功后,再写代码就可以ui->自动列出所有的控件。

在下图中此处写下如下代码,点击左侧的绿色三角,可以运行程序,也可以使用Ctrl+R运行程序,也可以F5按键调试程序。

程序正常运行后,点击按钮,我们可以看到文本框被赋值。

以下是我们做的第一个demo的源码,各位同学下载到本地运行时,需要确认编译完的路径。

https://download.csdn.net/download/zhouhui1982/88736785

注意代码所在路径及编译完的程序所在路径不要用中文,否则在编译时会出错误。

《写在最前边》icon-default.png?t=N7T8https://blog.csdn.net/zhouhui1982/article/details/135550465

《一、QT的前世今生》icon-default.png?t=N7T8https://blog.csdn.net/zhouhui1982/article/details/135550566

《二、QT下载、安装及问题解决(windows系统)》icon-default.png?t=N7T8https://blog.csdn.net/zhouhui1982/article/details/135550949


《三、Qt Creator使用》 icon-default.png?t=N7T8https://blog.csdn.net/zhouhui1982/article/details/135565568​​​​​​​​​​​​​​

《四、Qt的第一个demo》icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/135566987

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试突击】Java面试底层逻辑(HashMap、ConcurrentHashMap面试实战)

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

利用Monte Carlo进行数值积分(二)

进步空间很大的算法版本 话说去年6月的一个周六,我很无聊地发了一个帖子,写了一个自己感觉有点无聊的帖子。 Matlab多重积分的两种实现【从六重积分到一百重积分】https://withstand.blog.csdn.net/article/details/127564478 这个帖子居然成了我这种懒…

Video接口介绍

屏库 https://m.panelook.cn/index_cn.php Open LDI, open lvds display interface OpenLDI and LVDS是兼容的, 是一种电平 https://www.ti2k.com/178597.html MIPI DSI/Camera crosLink FPD-LINK(Flat panel display link)是National(TI) LVDS技术, …

NUS CS1101S:SICP JavaScript 描述:五、使用寄存器机进行计算

原文:5 Computing with Register Machines 译者:飞龙 协议:CC BY-NC-SA 4.0 我的目标是表明天堂机器不是一种神圣的生命体,而是一种钟表(相信钟表有灵魂属性的人将制造者的荣耀归功于作品),因为…

网络安全B模块(笔记详解)- 漏洞扫描与利用

漏洞扫描与利用 1.通过Kali对服务器场景server2003以半开放式不进行ping的扫描方式并配合a,要求扫描信息输出格式为xml文件格式,从生成扫描结果获取局域网(例如172.16.101.0/24)中存活靶机,以xml格式向指定文件输出信息(使用工具Nmap,使用必须要使用的参数),并将该操…

8. 自定义分页

EmployeeMapper.java自定义接口 /*** <p>* 查询 : 根据lastName查询员工列表&#xff0c;分页显示* </p>** param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)* param lastName 状态* retu…

《工具录》fierce

工具录 1&#xff1a;fierce2&#xff1a;选项介绍3&#xff1a;示例 本文以 kali-linux-2023.3-vmware-amd64 为例。 1&#xff1a;fierce fierce 是开源的网络安全工具&#xff0c;用于进行域名扫描和子域名枚举。 官方网址&#xff1a;https://github.com/mschwager/fierc…

ubuntu20.04安装cuda11.4以及cudnn

系统&#xff1a;ubuntu20.04硬件配置&#xff1a;GPU3080、CPU未知通过《软件和更新》在附加驱动选项中添加了驱动&#xff1a; 1.检查自己电脑支持的cuda nvidia-smi4. 下载cuda11.4.2 wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/c…

二十几种未授权访问漏洞合集

未授权访问漏洞是一个在企业内部非常常见的问题&#xff0c;这种问题通常都是由于安全配置不当、认证页面存在缺陷&#xff0c;或者压根就没有认证导致的。当某企业对外的服务端口、功能无限制开放&#xff0c;并且对用户的访问没有做任何限制的时候&#xff0c;可能会泄露出某…

别再用老掉牙的技术了!试试微服务架构!从零教你认识、开发、部署微服务

从0带你认识、开发、部署微服务&#xff08;一&#xff09; 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.目标 微服务架构的优缺点…

Visual Studio Code1.67版本已正式发布,新增Rust指南

Visual Studio Code1.67版本已正式发布&#xff0c;该版本包含大量增强生产力的更新项&#xff1a; 资源管理器文件嵌套 通过这次更新&#xff0c;用于浏览和管理文件和文件夹的Visual Studio Code的资源管理器工具现在支持基于名称嵌套相关文件。 资源管理器现在支持根据文…

【Vue2】一个数组按时间分割为【今年】和【往年】俩个数组

一. 需求 后端返回一个数组&#xff0c;前端按时间维度将该数组的分割为【今年】和【往年】俩个数组后端返回的数组格式如下 timeList:[{id:1,billTime:"2024-01-10",createTime:"2024-01-10 00:00:00",status:0},{id:2,billTime:"2022-05-25"…

【天龙怀旧服】攻略day7

关键字&#xff1a; 新星1.49、金针渡劫、10灵 1】新星&#xff08;苍山破煞&#xff09; 周三周六限定副本&#xff0c;19.00-24.00 通常刷1.49w&#xff0c;刷149点元佑碎金 boss选择通常为狂鬼难度&#xff0c;八风不动即放大不选&#xff0c;第二排第一个也不选&#xf…

鸿蒙HarmonyOS兼容JS的类Web开发

鸿蒙HarmonyOS兼容JS的类Web开发 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发文件组织目录结构文件访问规则媒体文件格式 js标签配置pageswindow示例 app.js应用生命周期应用对象6 HML语法参考页面结构数据绑定普通事件绑定冒泡事件绑定5捕获事件绑定5列表渲染条件渲染逻辑控制块…

josef约瑟 中间继电器 HJDZ-E440额定电压:AC220V 卡轨安装

HJDZ-静态中间继电器 系列型号&#xff1a; HJDZ-A200静态中间继电器&#xff1b;HJDZ-A110静态中间继电器&#xff1b; HJDZ-A002静态中间继电器&#xff1b;HJDZ-A004静态中间继电器&#xff1b; HJDZ-E112静态中间继电器&#xff1b;HJDZ-E112L静态中间继电器&#xff1…

element中el-cascader级联选择器只有最后一级可以多选

文章目录 一、前言二、实现2.1、设置popper-class和multiple2.2、设置样式 三、最后 一、前言 element-ui中el-cascader级联选择器只有最后一级可以多选&#xff0c;其它级只有展开子节点的功能&#xff0c;如下图所示&#xff1a; 可以观察到最后一级的li节点上没有属性aria-…

JVM内存结构 vs. Java对象模型 vs. Java内存模型

文章目录 0.三者的区别1.JVM内存结构2.Java对象模型3.Java内存模型&#xff08;JMM&#xff09;3.1 为什么需要JMM3.2 JMM是规范3.3 JMM是工具类和关键字的原理3.4 最重要的三点内容 0.三者的区别 JVM内存结构&#xff1a;和Java虚拟机的运行时区域有关。 Java对象模型&#…

OpenJDK 和 OracleJDK 哪个jdk更好更稳定,正式项目用哪个呢?关注者

OpenJDK 和 OracleJDK&#xff1a;哪个JDK更好更稳定&#xff0c;正式项目应该使用哪个呢&#xff1f;我会从&#xff0c;从开源性质、更新和支持、功能差异等方面进行比较&#xff0c;如何选择&#xff0c;哪个jdk更好更稳定&#xff0c;正式项目用哪个呢&#xff0c;进行比较…