1.对象树
对象树统一管理窗口内部控件的生命周期,本质是一颗多叉树。
new对象会加入到对象树中,窗口关闭/释放时统一销毁,不需要手动delete。
如果在栈上定义label对象,生命周期随构造函数,无法正常显示控件。
1.1演示回收过程
1.创建项目,选择继承QWidget。
2.新建一个类Mylabel,继承Qlabel。
创建mylabel的目的,继承QLabel类,自定义析构函数,打印日志,展示释放过程。
关键在于mylabel的 构造函数 参数一定要是Qwidget对象指针。
这样才能借助指针,在mylabel的构造函数,初始化列表调用父类QLabel的构造,传入QWidegt*,这样才能让mylabel对象挂到QWidget对象树上。
使用技巧:通过F4切换对应的头文件和源文件。
Mylabel类声明
mylabel.h
Mylabel类定义
mylabel.cpp
技巧:
光标放在函数声明上,alt+enter,选项中选择添加定义,自动在对应的cpp文件中添加相同的函数定义。
在Widget类的构造函数中创建Mylabel对象
期望运行效果:在关闭窗口的时候应该打印日志。
出现问题:使用cout打印乱码
原因:字符集不匹配
解决方法:使用Qt自带的打印日志工具——qDebug()
2.qDebug()
Qt内置日志打印工具,处理字符集不匹配问题问题。
头文件:QDebug
使用宏:qDebug() << "";
优点:调试阶段打印,发布时可以统一关闭,取消打印。
3.字符集
计算机保存字符的方式:二进制。
ASC码,一个数字代表一个字符,范围为0-127,英文字符种类有限,使用一个字节的空间保存即可。
中文字符的种类,日常4k多,加上生僻总共6w多。用数字一一对应,就可以表示所有汉字字符。
不同字符集就是 采用不同的数字 来表示一个字符。
常用的字符集 1.GBK 2.UTF8。
GBK,使用2字节数字表示一个汉字。windows系统中文版本,默认字符集为GBK。
utf8,变长编码,使用的字节数有变化。一个字符1-4个字节,能省点空间就省点。一般常用的汉字字符是3字节,还支持各种语言的字符。Linux默认字符符集是utf8。
问题:一个汉字字符占多少字节?
1.明确使用的字符集
2.gbk 2字节。utf8,常用的汉字用3个字节表示。
4.使用技巧
1.通过F4切换对应的头文件和源文件。
2.自动在cpp中添加定义
光标放在函数声明上,alt+enter,选项中选择添加定义,自动在对应的cpp文件中添加相同的函数定义。
2.查看mylabel.cpp文件的编码方式
- 右键,在ex中显示
- 用记事本打开文件,另存为,看到用utf8编码
5.简单小结
1.new对象,挂到对象树上管理生命周期,防止内存泄漏
2.QLabel.setText设置控件显示文本
3.编码问题:打印时推荐使用qDebug()
4.可以继承Qt内置类,扩展功能/重写方法