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

【Qt】 对象树 与 乱码问题

文章目录

  • 1. 对象树
    • 在堆上开辟空间 并管理
    • 栈上开辟 与 堆上开辟 的区别
  • 2. 乱码问题的解释
    • 编码方式的区分
    • 出现乱码的原因
    • 查看当前文件的编码方式
    • 如何处理 文件与 终端 编码方式 不统一

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() 还可以对 打印的调试日志 统一进行关闭



http://www.mrgr.cn/news/6997.html

相关文章:

  • 服务器数据恢复—重建RAID失败导致数据丢失的数据恢复案例
  • Pandas里使用SQL
  • os 虚拟内存
  • TCP与UDP传输的学习
  • Web应用服务器Tomcat
  • 如何在Geth中搭建P2P多节点以太坊私链:详细教程与实操步骤
  • 【算法】希尔排序、计数排序、桶排序、基数排序
  • 入门Java编程的知识点—>程序结构(day04)
  • 代码随想录day52 101孤岛的总面积 102沉没孤岛 103水流问题 104建造最大岛屿
  • CentOS7发送邮件如何配置SMTP服务器发信?
  • Ubuntu 22安装和配置PyCharm详细教程(图文详解)
  • UE5打包iOS运行查看Crash日志
  • AI副业:别只顾刷黑神话悟空!AI做神话账号,商单月入过万(附教程)
  • 适用于应用程序安全的 11 大 DevSecOps 工具
  • 大语言模型 (LLM)是什么_
  • 【设计模式】单例模式、工厂模式、策略模式、观察者模式、装饰器模式
  • 异步交互技术Ajax-Axios
  • LeetCode面试题Day16|LC56 合并区间、LC57 插入区间
  • Lodash 使用详解:提升 JavaScript 开发效率的利器
  • 【解压即玩】使命召唤 系列合集17-1,经典收藏