【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)

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内置类,扩展功能/重写方法

相关推荐
方安乐4 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
小小小米粒5 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
czhc11400756636 小时前
C# 428 线程、异步
开发语言·c#
:1216 小时前
java基础
java·开发语言
SilentSamsara7 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
小短腿的代码世界7 小时前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
harder3219 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
jinanwuhuaguo9 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw
Rust研习社9 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust