当前位置: 首页 > news >正文

初识QT-对象树

初识QT-对象树

在这里插入图片描述

引入

QLabel* label=new QLabel(this);

这样开辟空间不会造成内存泄漏

label对象会被析构释放掉,原因在于把对象挂到对象树上

什么是对象树?

本质上是树形结构(N叉树),通过树形结构把界面上各种元素组织起来

为什么我要更推荐在堆上开辟空间,如果在栈上开辟可能会出现以下情况:
在这里插入图片描述

对象树的应用:
在这里插入图片描述

如在QWidget的界面

在这里插入图片描述

创建对象树

MyLabel::MyLabel(QWidget*parent):QLabel(parent)//调用父类的构造函数才能把对象加到对象树上
{}

创建自定义对象的作用就是自定义析构函数,在析构函数中完成打印,看到对象被销毁的全过程

注意我们在写下一个函数的声明的时候可以利用快捷键Alt+Enter可以在对应的.cpp文件中添加对应的函数的定义

有关于乱码的问题及解决方案

我们在C++中学过可以用cout来输出,但是在QT中可能会变成乱码,

在这里插入图片描述

如何查看是哪种字符集呢?
在这里插入图片描述

右击并选择在Explorer中显示

此时会弹出窗口,再选择用记事本编辑,选择另存为,这时候可以看到编码格式了

在这里插入图片描述

如果显示的是ASNI,那么就是GDK

那么该如何解决呢

QT中提供了一个叫QDebug()的工具,借助这个,可以完成日志的打印

需要添加头文件

#include <QDebug>

使用方式:

QDebug()<<"MyLabel";

QDebug()对比cout来说还有个好处:打印的调试日志是可以统一关闭的

小结

1.QLabel类的功能:能够在界面上显示字符串。是通过SetText来设置的,参数是QString(QT里面会将容器封装到QString里面)

2.内存泄漏/文件资源泄漏是很严重的问题

3.QT通过对象树来统一释放界面的控件对象,在QT中更推荐用new的方式,在堆上创建,但是需要指名父类对象是谁。

​ 如果没有挂到对象树上,需要记得手动释放

4.面向对象中的继承,实际上本质上就是对现有代码的扩展,如我们在对象树中想要查看对象的销毁过程,QT自带的QLabel不能查看,所以我们需要自己创建MyLabel这个类继承QLabel,来看到析构的过程。当然不仅可以看析构,也可以实现任何功能

5.为什么要通过打印日志的方式来调试?

bel不能查看,所以我们需要自己创建MyLabel这个类继承QLabel,来看到析构的过程。当然不仅可以看析构,也可以实现任何功能

5.为什么要通过打印日志的方式来调试?

因为如果一个bug出现的概率特别小,那么很有可能通过编译器看不出来,所以需要借助日志

http://www.lqws.cn/news/600013.html

相关文章:

  • Adobe AI高效设计秘籍与创新思维进阶
  • STM32
  • 三极管是NPN还是PNP
  • 为什么Netty 性能高
  • 关于vue2使用elform的rules校验
  • 第8章路由协议,RIP、OSPF、BGP、IS-IS
  • Zephyr RTOS 信号量 (Semaphore)
  • SpringMVC--使用RESTFul实现用户管理系统
  • 鸿蒙学习——开发中遇到的问题记录
  • Windows VMWare Centos Docker部署Springboot + mybatis + MySql应用
  • Embeddings模型
  • IOday2--7.1
  • 工作中常用的Git操作命令(一)
  • 电脑键盘不能打字了怎么解决 查看恢复方法
  • Wisdom SSH 与宝塔面板:深度对比剖析
  • P1312 [NOIP 2011 提高组] Mayan 游戏
  • 将POD指定具体机器上运行
  • ip网络基础
  • 睿抗-2025年江西省第三题
  • python+uniapp基于微信小程序的流浪动物救助领养系统nodejs+java
  • 3.2.2、CAN总线-过滤器的使用
  • SQL学习笔记6
  • sqlmap学习笔记ing(1.Easy_SQLi(时间,表单注入))
  • 位运算经典题解
  • 高并发场景下,TCP/UDP丢包的隐藏陷阱
  • c语言学习_初识c语言21
  • 伊吖学C笔记(7、地址、指针、指针数组)
  • 面试拷打-20250701
  • 新版Android Studio默认展示类成员的问题解决
  • CPU缓存一致性