【Qt】初识

news2024/11/15 7:05:56

一、使用Label显示Hello World

1.ui设计

可以在Qt Designer中拖拽方式进行创建

2.代码方式

在myqwidget.cpp文件中添加下列代码

二、对象树

我们在堆上创建了QLabel类的对象。但是我们没有去delete,这样会产生内存泄漏吗? 

答案是不会。label对象会在合适的时候(窗口被关闭或者被销毁)被析构释放(虽然没有手动写delete,但确实能释放)

为什么?

原因在于这个this。之所以能够把对象释放掉,主要是因为把这个对象挂在了对象树上。

前端开发(网页开发)也涉及到 类似的 对象树(DOM),本质也是一个树形结构(N叉树),通过树形结构把页面上的各种元素组织起来

Qt中也是类似,也是搞了一个对象树,N叉树,把界面上的各种元素组织起来了。

所以此处用new的方式创建对象,也就是把这个对象的生命周期交给Qt的对象树统一管理

当把对象改成在栈上创建,此时就可以看到,运行起来的程序就无法显示出我们所创建的label对象,此时label对象随着析构函数的结束,就销毁了。

模拟实现Qt自动释放对象机制

创建一个自定义的类,最主要的目的,是自定义一个析构函数,在析构函数中,完成打印,方便咱们看到最终的自动销毁对象树的效果

这是创建的MyQLabel类的头文件

小技巧:

1.在Qt Creator中,可以通过 F4 切换头文件和对应的 .cpp文件。

这是C++ IDE的常规功能

(比如在 Vim 中可以通过 :A 的方式来完成切换,也可以使用 :AT 的方式新开一个标签页来显示)

2.在点击成员函数上,按Alt+回车,再按回车,会自动生产.cpp文件中成员函数实现。

在mywidget.cpp文件中定义对象,并传this。

使用自己定义的MyQLabel代替原来的QLabel,所谓的 “继承” 本质上是拓展,保持原有功能不变的基础上,给对象扩展出一个析构函数,通过这个析构函数,打印一个自定义的日志,方便我们观察程序运行效果。

在myqlabel.cpp文件中,我们在析构函数中打印一条日志消息,

来让我们看看效果,注意:此时输出什么也没有

当我们关闭这个对话框时

就会出现一条消息。但是这个消息是乱码的。

但是日志消息是有的,说明析构函数是执行了。

虽然没有手动delete,但是由于把MyQLabel挂到了对象树上,此时窗口被销毁的时候,就会自动销毁对象树中的所有对象,MyQLabel的析构是执行到了。 

而乱码这个事情,我们以后会经常涉及到,乱码问题出现的原因,有且仅有一个(不局限于C++),就是编码方式不匹配。

目前,表示汉字字符集,主要是两种方式

  1. GBK,(中国大陆)使用2个这字节表示一个汉字,Windows简体中文版,默认的字符集就是GBK
  2. UTF-8/ utf8 变长编码,表示一个符号使用的字节数有变化,2-4,但是在utf8中,一个汉字。一般是3个字节。Linux默认就是utf8

如果你字符集本身是utf8编码的,但是终端(控制台)是按照gbk方式来解析显示的,此时就会出现乱码(拿着utf8的数值,去查询gbk的码表),此时就会出现乱码了!

那么如何查看当前文件是如何编码的呢?

先找到当前文件所处路径的文件夹,用记事本打开,就可以查看了。

如果显示的是UTF-8,就说明这个文件是用utf8进行编码的

如果显示的是ANSI,就说明这个文件是用GBK方式进行编码的。

而我们这个Qt 终端控制台的编码方式没有查询到。

所以Qt提供了一个函数,专门来打印消息qDebug().需要一个头文件,QDebug自动换行

qDebug是一个宏,封装了QDebug类的对象。

qDebug打印的调试日志,是可以统一进行关闭的。

三、使用Line Edit方式显示Hello World

可以通过Qt Designer中拖拽控件进行添加

代码方式 

 

四、通过按钮方式显示Hello World

ui中,Push Button就是一个普通按钮,如果想用,就可以使用拖拽

在Qt Designer中创建一个控件的时候,此时就会给这个控件分配一个objectName属性。

这个属性的值,要求是在界面中是唯一的(不能和别的控件重复)

qmake在预处理.ui文件的时候,就会根据这里的objectName生产对应的C++代码

C++代码中该QPushbutton对象的变量名字就是这里的objectName。这个变量就是ui属性的成员变量。

 纯代码方式:

在mywidget.h文件中定义成员变量MyButton 和 成员函数 Headler,在.cpp中实现

五、Qt窗口坐标系

坐标体系:以左上角为原点(0,0),X向右增加,Y向下增加。

 

move函数,用于调正控件的位置

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

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

相关文章

2024 京麟ctf -MazeCodeV1

文章目录 检查代码思路一个字节的指令注意附上S1uM4i佬们的exp https://www.ctfiot.com/184181.html 检查 代码 __int64 __fastcall check_solve(char *a1) {__int64 result; // rax__int64 v2; // rax__int64 index_step; // rax__int64 v4; // rax__int64 v5; // rax__int64…

LPDDR6带宽预计将翻倍增长:应对低功耗挑战与AI时代能源需求激增

在当前科技发展的背景下,低能耗问题成为了业界关注的焦点。国际能源署(IEA)近期报告显示,日常的数字活动对电力消耗产生显著影响——每次Google搜索平均消耗0.3瓦时(Wh),而向OpenAI的ChatGPT提出的每一次请求则消耗2.9…

继电器的选型和英应用

如何保证信号的稳定? 怎么消除继电器触点的电弧? 危害: 继电器的触点在动作时容易产生电弧,电弧具有热效应容易导致触点烧蚀粘接,缩短继电器的寿命,并且产生电弧的过程中会对外进行电磁辐射,…

鸿蒙开发接口图形图像:【WebGL】

WebGL WebGL提供图形绘制的能力,包括对当前绘制图形的位置、颜色等进行处理。 WebGL标准图形API,对应OpenGL ES 2.0特性集。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md…

Django 做migrations时出错,解决方案

在做migrations的时候,偶尔会出现出错。 在已有数据的表中新增字段时,会弹出下面的信息 运行这个命令时 python manage.py makemigrationsTracking file by folder pattern: migrations It is impossible to add a non-nullable field ‘example’ to …

Spring OAuth2:开发者的安全盾牌!(下)

上文我们教了大家如何像海盗一样寻找宝藏,一步步解锁令牌的奥秘,今天将把更加核心的技巧带给大家一起学习,共同进步! 文章目录 6. 客户端凭证与密码模式6.1 客户端凭证模式应用适用于后端服务间通信 6.2 密码模式考量直接传递用户…

小短片创作-理论知识(三)

1、抗锯齿 1.相机移动的时候出现锯齿 2.当1个像素在三角形边缘的时候,可能取值为白色,也可能取值为黑色,表现出来就是闪烁,或锯齿 3.如果我们通过超采样将1个像素变成4个像素进行计算,得到的结果就会更准确&#x…

文件IO(二)

文件IO(二) 标准IO缓冲类型全缓冲行缓冲不缓冲 打开文件fopen 操作文件按字符读写(fgetc fputc)按行读写(fgets fputs)按块(对象)读写(fread fwrite)按格式化读写(fscanf…

【考研数学】李艳芳900比李林880难吗?值得做吗?

差不多,只能说基础没搞好刷这两个都很费劲 李艳芳900题把每个章节题目划分为ABC三个难度级别,题目选取的难度较大也比较新颖,计算量也非常接近考研趋势,原创性很高,比较适合过完一轮的同学继续做补充和强化 880算是比…

深度学习:手撕 RNN(2)-RNN 的常见模型架构

本文首次发表于知乎,欢迎关注作者。 上一篇文章我们介绍了一个基本的 RNN 模块。有了 这个 RNN 模块后,就像搭积木一样,以 RNN 为基本单元,根据不同的任务或者需求,可以构建不同的模型架构。本节介绍的所有结构&#…

(函数)判断素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明素数判断函数&#xff1b; void prime(int number);int main() {//初始化变量值&#xff1b;int number 0;//获取用户输入的数据&#xff1b;printf(&quo…

有趣的css - 列表块加载动效

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用 css 打造一个极简的列表块加载动效。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整…

渗透测试工具Cobalt strike-2.CS基础使用

三、结合metasploit,反弹shell 在kali中开启使用命令开启metasploit msfconsole ┌──(root㉿oldboy)-[~] └─# msfconsole --- msf6 > use exploit/multi/handler [*] Using configured payload generic/shell_reverse_tcp --- msf6 exploit(multi/handler) > show …

excel表格里怎样不删除0,又不显示0呢?

在单元格里不显示0&#xff0c;大体上有这么几种方法&#xff1a; 1.设置单元格自定义格式 选中数据区域&#xff0c;鼠标右键&#xff0c;点一下设置单元格格式&#xff0c;选中数字&#xff0c;自定义&#xff0c;在右侧的类型栏&#xff0c;设置格式&#xff1a; [0]&quo…

FinRobot:一个由大型语言模型(LLM)支持的新型开源AI Agent平台,支持多个金融专业AI Agent

财务分析一直是解读市场趋势、预测经济结果和提供投资策略的关键。这一领域传统上依赖数据&#xff0c;但随着时间的推移&#xff0c;越来越多地使用人工智能&#xff08;AI&#xff09;和算法方法来处理日益增长的复杂数据。AI在金融领域的作用显著增强&#xff0c;它自动化了…

ch3运输层--计算机网络期末复习(持续更新中)

运输层位于网络层之上 运输层协议提供的某些服务受到网络层协议的限制。比如,时限和带宽保证。 运输层也提供自己的特殊服务。比如,可靠数据传输服务,安全性服务。 网络层:两个主机之间的逻辑通信 运输层:两个进程之间的逻辑通信 网络地址:主机的标识(IP地址) 传输地址: …

3.Linux系统环境搭建

一、虚拟化机&#xff1a;指的是通过虚拟化技术将一台计算机分为多台逻辑计算机。注&#xff1a;虚拟机共用CPU和内存资源。 二、虚拟机用途&#xff1a; 1.搭建学习环境&#xff1a;例如在同一间实验室里&#xff0c;物理机Windows系统&#xff0c;虚拟机可以用Linux系统。 …

【网络运维的重要性】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

大模型低秩适配器LoRA源码解读

一、引言 关于 LoRA 的具体理论原理可以参考&#xff1a;图解大模型微调系列之&#xff1a;大模型低秩适配器 LoRA&#xff08;原理篇&#xff09; 关于 LoRA 的源码解读实操可以参考&#xff1a;图解大模型微调系列之&#xff1a;大模型低秩适配器 LoRA&#xff08;源码解读…

四川汇聚荣聚荣科技有限公司是正规的吗?

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;越来越多的科技公司如雨后春笋般涌现。然而&#xff0c;在这个信息爆炸的时代&#xff0c;如何判断一家公司是否正规成为了许多人关注的焦点。本文将围绕“四川汇聚荣聚荣科技有限公司是否正规”这一问题展开讨论&#xf…