【Qt】 对象树 与 乱码问题

1. 对象树

在堆上开辟空间 并管理

该代码只进行new(在堆上开辟空间) 而没有delete 正常来说是会造成 内存泄露的问题
但是在Qt中 将 new后创建对象的生命周期 交给 对象树统一管理


假设存在这样的界面 窗口为 QWiget 对象
在界面中 包含其他的元素
通过对象树来进行表示


Qwidget 作为 根节点
其中包含几个子节点 分别为 QLabel QPushButton QListWidget 三个 对象
在 QListWidget中 包含 若干个 QListltem

通过这个树形结构 就把界面上要显示的控件 都组织起来了
使用对象树 把这些内容组织起来 目的是为了能够在合适的时机(窗口关闭/销毁) 把这些对象统一进行释放


栈上开辟 与 堆上开辟 的区别

当把对象改成在栈上创建 此时就可以看到 运行起来的程序 无法显示出 hello world
此时的 label 对象 随着 构造函数的结束 就销毁了
所以更推荐在堆上创建的方式


2. 乱码问题的解释

编码方式的区分

在计算机中 一个汉字 占有几个字节?

需要先判断当前 中文编码使用的是那种字符集
日常的常用字为 4k 左右
加上各种生僻字 总数为 6w 左右
使用一个大表格 给每个汉字 分配一个整数即可


表示汉字的字符集 主要分为 两种方式:
1. GBK (中国大陆)
使用两个字节表示一个汉字 windows简体中文版 默认的字符集是 GBK

2. UTF-8 /utf8
变长编码 表示一个符号 使用的字节数有变化
在utf8中 一个汉字 一般表示 3个 字节
Linux 中 默认 就是 utf8


出现乱码的原因

出现乱码的原因 : 编码方式不匹配
若字符串本身 是 utf8编码的 但是终端是按照 GBK的方来进行解析 显示 此时就会出现乱码
( utf8的数值 查询 GBK的码表 )


查看当前文件的编码方式

点击.cpp文件 并在 Explorer中显示


点击.cpp文件 选择编辑


点击文件 选择另存为


若显示 UTF-8 则说明这个文件 为 UTF-8 编码
若显示 ANSI 则说明这个文件 为 GBK 编码


如何处理 文件与 终端 编码方式 不统一

Qt中 存在 QString 可以帮助我们自动处理编码方式
同时 Qt中提供了 专门用来 提供打印日志的工具 —— qDebug() 也能自动处理编码方式


当使用 C++的 std去打印时 发现结果会出现乱码 即编码方式 不统一
(文件为 UTF-8编码方式 而终端不为 UTF-8编码方式)


QDebug 是 Qt中的一个类 但是又不会直接使用这个类
qDebug() 是一个 宏 封装了 QDebug 对象
qDebug() 可以当作 cout 来使用


qDebug() 能自动处理编码方式 所以此时编码方式一致 就能输出正常的汉字了

若在Qt中 想通过打印日志的方式 输出一些调试信息 优先使用 qDebug()
同时 qDebug() 还可以对 打印的调试日志 统一进行关闭


  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风起、风落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值