四、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.mzph.cn/news/620505.shtml

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

相关文章

Qt打包程序

添加链接描述

11Spring IoC注解式开发(下)(负责注入的注解/全注解开发)

1负责注入的注解 负责注入的注解,常见的包括四个: ValueAutowiredQualifierResource 1.1 Value 当属性的类型是简单类型时,可以使用Value注解进行注入。Value注解可以出现在属性上、setter方法上、以及构造方法的形参上, 方便起见,一般直…

leetcode-删除排序链表中的重复元素

83. 删除排序链表中的重复元素 题解: 要删除一个已排序链表中的所有重复元素,从而使每个元素只出现一次,我们可以使用一个指针来遍历这个链表,同时比较当前节点和它下一个节点的值。如果它们相等,我们就删除下一个节…

git修改历史(非最新)提交信息

二、修改最近第二次或更早之前的commit信息 当前有三次提交,从近到远分别为1、2、3 以修改第2次提交为例(从最新往前数) 1、使用命令git rebase -i HEAD~2 按i进入编辑模式,将对应的pick改为edit,然后ctrlc退出。最…

高并发场景下底层账务优化方案

在秒杀等场景中,经常会需要对库存、商家冻结资金做一些修改,而并发一旦上来后会导致这个修改动作频繁超时及失败,那么如何处理呢? 下面将以问答形式分享解决方案: 底层账务优化相关,根据实际业务进…

Linux mren命令教程:批量重命名文件(附实际操作案例和注意事项)

Linux mren命令介绍 mren(全称multiple rename),它是用来对多个文件进行重命名的工具。这个命令在一次操作中可以批量改变多个文件的名称,特别是在需要对大量文件进行重命名时,mren将节省大量的时间和努力。 Linux m…

linux安装系统遇到的问题

这两天打算攻克下来网络编程,发现这也确实是很重要的一个东西,但我就奇了怪了,老师就压根没提,反正留在我印象的就一个tcp/ip七层网络。也说正好,把linux命令也熟悉熟悉,拿着我大一课本快速过过 连接cento…

survey和surveyCV:如何用R语言进行复杂抽样设计、权重计算和10折交叉验证?

一、引言 在实际调查和研究中,我们往往面临着样本选择的复杂性。复杂抽样设计能够更好地反映真实情况,提高数据的代表性和可靠性。例如,多阶段抽样可以有效地解决大规模调查的问题,整群抽样能够在保证样本的随机性的同时减少资源消…

腾讯云添加SSL证书

一、进入腾讯云SSL证书: ssl证书控制台地址 选择“我的证书”,点击"申请免费证书" 2、填写域名和邮箱,点击“提交申请” 在此页面中会出现主机记录和记录值。 2、进入云解析 DNS:云解析DNS地址 进入我的解析-记录…

QT DAY5作业

1.QT基于TCP服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QMessageBox> //消息对话框类 #include <QTcpSocket> //客户端类 #include <QList> //链表容器类namespace …

show processlist 显示的MySQL语句不全的解决方法

介绍 使用show processlist命令时显示MySQL语句不全&#xff0c;可以通过show full processlist命令解决。 示例 show full processlist

VC++中通过ADO中的_RecordsetPtr操作数据库:增删改查

VC中通过ADO中的_RecordsetPtr操作数据库&#xff1a;增删改查 _RecordsetPtr智能指针&#xff0c;它是专门为通过记录集操作数据库而设立的指针&#xff0c;通过该接口可以对数据库的表内的记录、字段等进行各种操作。 要搞清楚:数据库和ADO的记录集是两个不同的概念,是存在…

Center审计策略表安装和策略添加(事务)——(Linux/Windows版本)

本博客主要讲述Center的审计策略表安装和策略添加 使用事务添加 1、开启事务 my->StartTransaction(); 2、编写sql语句 //清除原来数据&#xff0c;防止数据污染my->Query("DROP TABLE IF EXISTS t_strategy");string sql "CREATE TABLE t_strategy (…

世微AP630X地摊灯 手电筒方案 可充电多功能LED灯

1,信息来源&#xff1a;深圳市世微半导体有限公司 Augus 2,产品的特性有&#xff1a; 全集成单芯片控制 5 照明循环模式可选 0.5A/1A 固定充电电流可选 内置 MOS 1.8A 驱动电流 可外置 MOS 驱动更大电流 充电指示/低电提示/短路提示 3A 手电筒过流保护? 预设 4.22V 电…

云原生分布式多模架构:华为云多模数据库 GeminiDB 架构与应用实践

文章目录 前言一、GeminiDB 总体介绍1.1、华为云数据库全景图1.2、GeminiDB 发展历程1.3、GeminiDB 全球分布情况 二、GeminiDB 云原生架构2.1、核心设计&#xff1a;存算分离&多模扩展2.2、存算分离&多模扩展核心优势2.3、高可用&#xff1a;秒级故障接管2.4、弹性扩展…

Sonar Qube基本使用

中文化 Sonar Qube的使用方式很多&#xff0c;Maven可以整合&#xff0c;也可以采用sonar-scanner的方式&#xff0c;再查看Sonar Qube的检测效果 Sonar-scanner实现代码检测 下载Sonar-scanner&#xff1a;https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/…

索引的概述和使用

1、概述 索引占用存储空间&#xff0c;并不是越多越好&#xff0c;太多的索引会影响系统性能 索引分类 聚集索引&#xff1a; 逻辑顺序和物理顺序是一致的&#xff08;表中行数的位置决定了该行在内存中存储的位置&#xff09;&#xff0c;因此效率优先于非聚集索引&#xff…

强化学习应用(六):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

【数据库系统概论】期末复习5

系列文章 期末复习1 期末复习2 期末复习3 期末复习4 系列文章试述数据库设计过程。数据字典的内容和作用是什么&#xff1f;登记日志文件时为什么必须先写日志文件&#xff0c;后写数据库&#xff1f;数据库中为什么要进行数据库恢复&#xff1f;数据库恢复能够保证事务的哪些…

Python: network:sip: pyVoIP;sip测试工具

今天向大家推荐一个开源项目&#xff0c;这个是python实现的一个VoIP的终端模拟器。看着就是一个非常好的通信测试软件。python实现&#xff0c;可以批量化&#xff08;部分模拟sipp功能&#xff09;实现通信压力测试&#xff0c;满足一定的需求。需要注意的是可能需要自己在这…