QT——第一个项目(HelloWorld)

QT——第一个项目(HelloWorld)

  • 通过控件创建
  • 通过代码的方式实现
  • 对象树
  • 自己观察

我们之前对QT有了一定的了解,今天我们要用QT来写一段经典代码:HelloWorld。如果还没有看过前两次QT初识的小伙伴可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/137194408

https://blog.csdn.net/qq_67693066/article/details/137200742

通过控件创建

QT可以通过拖拉控件的方式来显示HelloWorld,我们首先创建好一个项目:
在这里插入图片描述
然后点击下面的ui文件,进入Desginer:
在这里插入图片描述在这里插入图片描述

往下滑,找到Lable:
在这里插入图片描述长按并拖拽到上方的灰框中:
在这里插入图片描述就会多出来一个文本框,双击可以编辑它:
在这里插入图片描述
然后点击“编辑”:
在这里插入图片描述
在这里插入图片描述
我们会发现这个ui文件多了很多,这个就是我们刚才的操作。我们可以运行一下:

在这里插入图片描述

发现HelloWorld出现了。

通过代码的方式实现

通过代码的方式实现我们要通过构造函数来实现:
点击下方的widget.cpp:
在这里插入图片描述
在这里插入图片描述
我们要在Widget的构造函数创建一个label标签,到时候通过构造函数,会直接构造一个label,显示在窗口中:

在这里插入图片描述
结果QT不认识,我们得首先包一下头文件:
在这里插入图片描述
这下没有报错了,我们来设置文本:
在这里插入图片描述运行:

在这里插入图片描述
成功。

对象树

如果有同学有留心的,就会发现,我刚刚是new了一个对象,但是我最后没有delete释放它:
在这里插入图片描述这时候会不会产生内存泄漏的问题呢?答案是不会,为啥呢?因为我们这个变量创建在堆上,已经挂到了对象树上了,在堆上的对象会随着对象树的销毁而销毁

在Qt框架中,对象树(Object Tree)是一种基于QObject类及其子类的内存管理策略和对象组织方式。对象树的概念对于理解和编写Qt应用程序至关重要,特别是在GUI编程和事件处理等方面。
特点概述:

  1. 对象关联
  • 所有从QObject派生出来的类都可以构成对象树。每个QObject实例都有一个指向其父对象(parent object)的指针,并且维护着一个子对象列表(children list)。
  1. 内存管理
  • 当创建一个QObject子类实例时,可以传入一个父对象作为构造函数的参数。一旦设置了父对象,该子对象就被添加到父对象的子对象列表中。
  • 当父对象被析构时,其所有的子对象也会被自动析构,并释放内存,这样就实现了层级式的内存管理,有效防止内存泄漏。
  1. 事件处理
  • 事件传播也是沿着对象树进行的,父对象可以拦截和处理其子对象的事件,或者决定是否将事件传递给子对象。
  1. 信号与槽
  • 通过对象树,Qt的信号与槽机制也能很好地运作,信号可以跨对象树边界连接,方便不同组件之间的通信。
  1. 布局管理
  • 在图形用户界面(GUI)编程中,窗口部件(widgets)和其他可视组件常常组织成一个对象树,这对于布局管理和整体界面刷新非常有用。
    构造和析构顺序:
  • 对象树的构造是从父对象到子对象自上而下的顺序进行的,即先构造父对象,再构造其子对象。
  • 相反,对象树的析构是从子对象到父对象自下而上的顺序进行的,即先析构最底层的子对象,然后逐层向上析构直至父对象。

总之,Qt对象树简化了内存管理,并且为跨对象的交互和事件处理提供了结构化的方式,极大地提高了开发效率和代码的可维护性。
在这里插入图片描述
对象树大概就是长成这个样子:
在这里插入图片描述

我们可以试试不用new的方式:
在这里插入图片描述
就会出现一些奇怪的事:
在这里插入图片描述
因为我们这个对象是在栈上创建的,销毁的时间不同步,就会出现这样的问题。

自己观察

我们可以自己写一段程序来观察对象树,我们首先加一个C++ class:
在这里插入图片描述选择新建文件和项目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述创建好之后,会帮我们建立起.h和.cpp文件,之后在头文件里写这些东西:

#ifndef MYLABEL_H
#define MYLABEL_H
#include<QLabel>
#include<iostream>class MyLabel : public QLabel
{
public:MyLabel(QWidget* parent);~MyLabel();
};#endif // MYLABEL_H

在对应的.cpp文件中,写相应的实现:

#include "mylabel.h"MyLabel::MyLabel(QWidget* parent): QLabel(parent)
{}MyLabel::~MyLabel()
{std::cout << "MyLabel has be destoryed" <<std::endl;
}

之后在widget.cpp中换成我们自己写的MyLabel:
在这里插入图片描述
之后运行:
在这里插入图片描述之后在终端,我们可以看到析构函数打印的信息:
在这里插入图片描述
之所以我们能挂到对象树上,是因为我们的QLabel挂到了QWidget这个父对象:
在这里插入图片描述

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

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

相关文章

CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

沉浸又护眼!观影爱好者的最佳CP“星光S1”4月6日开售

据悉&#xff0c;海信激光电视将在4月6日举行线上发布会。除3月已经开售、配备可折叠屏幕的星光S1 100英寸外&#xff0c;本次发布会还将发布星光S1 75英寸、80英寸、88英寸全系版本&#xff0c;为不同用户实现院线级家庭观影体验。 高色域&#xff0c;一直是新一代显示技术的…

LeetCode - 1702. 修改后的最大二进制字符串

文章目录 解析AC CODE 题目链接&#xff1a;LeetCode - 1702. 修改后的最大二进制字符串 解析 详细题解&#xff1a;贪心&#xff0c;简洁写法&#xff08;Python/Java/C/Go/JS/Rust&#xff09; 思路很牛b。 简单来说我们需要想办法将0配对&#xff0c;将其变为10&#xff0…

K8S:常用资源对象操作

文章目录 一、使用Replication Controller(RC)、Replica Set(RS) 管理Pod1 Replication Controller&#xff08;RC&#xff09;2 Replication Set&#xff08;RS&#xff09; 二、Deployment的使用1 创建2 滚动升级3 回滚Deployment三、 Pod 自动扩缩容HPA1 使用kubectl autosc…

React + three.js 3D模型骨骼绑定

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定 项目代码(github)&#xff1a;https://github.com/couchette/simple-react-three-skeleton-demo 项目代码(gitcode)&#xff1a;https://gitcode.com/qq_41456316/simple-r…

spring(7)-事务

事务 1、 事务概述2、spring对事务的支持2.1 spring事务管理API2.2 事务属性2.2.1 事务传播行为2.2.2 案例2.2.2.1 REQUIRED2.2.2.2 REQUIRES_NEW2.2.2.3 NESTED 2.2.3 事务隔离行为2.2.3.1 测试2.2.3.2 读未提交2.2.3.3 读提交2.2.3.4 可重复读 2.2.4 事务超时2.2.5 只读事务2…

OpenHarmony南向开发案例:【智能垃圾桶】

样例简介 智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量&#xff0c;提醒主人及时处理垃圾&#xff1b;通过日程管家可以实现和其他智能设备联动。 核心组件位置功能距离传感器置于垃圾桶盖内侧感应垃圾量红外传感器置于垃圾桶前端感应是否有人靠近光敏电阻开发板…

2006-2021年各省能源消费总量数据(无缺失)

2006-2021年各省能源消费总量数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2006-2021年 2、来源&#xff1a;能源年鉴、各省年鉴 3、范围&#xff1a;30个省 4、指标&#xff1a;能源消费总量&#xff08;万吨标煤&#xff09; 5、缺失情况&#xff1a;无缺失 …

AI人工智能讲师简历大模型讲师叶梓大模型技术与应用培训提纲

叶梓&#xff0c;工学博士&#xff0c;高级工程师。现某大型上市企业资深技术专家。 2005年上海交通大学计算机专业博士毕业&#xff0c;在校期间的主研方向为数据挖掘、机器学习、人工智能。毕业后即进入软件行业从事信息化技术相关工作&#xff1b;负责或参与了多项国家级、省…

Docker Nginx 部署Vue项目

先弄个ngix镜像&#xff0c;还原到linux里面 发布包放的位置 nginx配置文件 server {listen 8049;server_name localhost;#charset koi8-r;access_log /var/log/nginx/host.access.log main;error_log /var/log/nginx/error.log error;location / {# root 根目录&a…

Vue3报错:‘defineProps‘ is not defined no-undef

解决方法 在package.json中添加 "vue/setup-compiler-macros": true 记得在上面的 "node": true 后面加一个逗号 "eslintConfig": {"root": true,"env": {"node": true,"vue/setup-compiler-macros": t…

Compose UI 之 Card 卡片组件

Card Card 是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。 Card 使用的一些经典的场景: 列表数据,例如 新闻列表,产品列表等。信息提示框,使用 Card 组件…

一起学习python——基础篇(13)

前言&#xff0c;python编程语言对于我个人来说学习的目的是为了测试。我主要做的是移动端的开发工作&#xff0c;常见的测试主要分为两块&#xff0c;一块为移动端独立的页面功能&#xff0c;另外一块就是和其他人对接工作。 对接内容主要有硬件通信协议、软件接口文档。而涉…

windows软件在更新的时候,会自动找到旧版本软件的位置,这个功能如何实现 ?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

root@localhost‘s password: Permission denied, please try again.

编辑、etc/ssh/sshd_config文件 ,将PermitRootLogin这行改为yes rootubuntu:/home/ubuntu# vim /etc/ssh/sshd_config 重新加载改文件 /etc/init.d/ssh restart

AI防关联引流系统:解锁TikTok全球流量密码 轻松驾驭全球流量

TikTok的风潮席卷全球&#xff0c;吸引了无数运营者的目光。在这个崭新的出海风口&#xff0c;每一位创作者都渴望脱颖而出。而在这其中&#xff0c;掌握并运用各种TikTok运营工具无疑是一把利剑&#xff0c;能够帮助我们披荆斩棘&#xff0c;事半功倍。 在众多运营工具中&…

element的el-table表格自定义表头解决数据不更新问题

场景&#xff1a; 需要生成一个表格&#xff0c;表头由后端返回&#xff0c;自定义生成。 问题&#xff1a; 通过插槽传入表头&#xff0c;但是&#xff0c;如果我把表头初始值赋值为null&#xff0c;虽然可以正常显示表头&#xff0c;但是一开始会报错&#xff1b;如果我把表…

策略模式类图与代码

某大型购物中心欲开发一套收银软件&#xff0c;要求其能够支持购物中心在不同时期推出的各种促销活动&#xff0c;如打折、返利(例如&#xff0c;满300返100),等等。现采用策略(Strategy)模式实现该要求&#xff0c;得到如图7.13 所示的类图。 【Java 代码】 import java.util…

IIS中部署netcore程序出现500错误如何处理?

500错误在IIS部署中经常出现&#xff0c;但是解决非常耗时 官方也有给出一些指引&#xff0c;但是无法解决根本问题 建议检查netcore相关组件是否正确安装&#xff0c;如下&#xff1a; aspnetcore-runtime-3.1.32-win-x64 dotnet-hosting-3.1.32-win dotnet-runtime-3.1.…

postgresql或者opengauss中查询表的描述

在使用postgresql数据库&#xff0c;或者opengauss数据库时&#xff0c;如果要通过模式名&#xff08;schema&#xff09;和表名&#xff08;table&#xff09;&#xff0c;查询表的描述信息&#xff0c;可以使用下面的SQL&#xff1a; select pt.schemaname, pt.tablename ,p…