初识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出现的概率特别小,那么很有可能通过编译器看不出来,所以需要借助日志