首页 > 其他分享 >【Qt】 对象树 与 乱码问题

【Qt】 对象树 与 乱码问题

时间:2024-08-20 20:24:01浏览次数:10  
标签:文件 Qt 对象 乱码 qDebug 编码方式

文章目录

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


标签:文件,Qt,对象,乱码,qDebug,编码方式
From: https://blog.csdn.net/qq_62939852/article/details/141360795

相关文章

  • 面向对象的三个基本特征通
    面向对象的三个基本特征通常被称为封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这三个特征共同构成了面向对象编程(OOP)的核心思想。封装(Encapsulation):封装是对象的一个重要特性,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该......
  • MQTT
    目录mosquitto搭建本地服务器下载配置启动订阅主题发布消息mosquitto搭建本地服务器下载配置启动mosquitto.exe-cmosquitto.conf-v订阅主题发布消息mosquito_pub-hlocalhost-t"topic"-i"client"-m"message"......
  • TCP 通信-Qt-思维导图-学习笔记
    TCP通信TCP简介TCP协议概述全称:TransmissionControlProtocol(传输控制协议)特性:面向连接、可靠、基于字节流的传输层通信协议TCP通信流程建立连接:TCP通信必须先建立连接通信端:分为客户端和服务端服务端操作监听端口:服务端监听某个端口,等待客户端连接......
  • Python 面向对象(笔记)
    一、函数的概念函数用于在程序中分离不同的任务,是模块化程序设计的基本构成单位,是对程序逻辑进行结构化或过程化的一种编程方法函数定义好后,可以反复调用使用,这样就可以避免重复编写代码,而且,功能如果需要修改,只要更改函数定义就可以,维护方便1.1使用函数的优点 实现结......
  • 【C++】类与对象篇一
    【C++】类与对象篇一一.面向过程和面向对象初步认识二.类的详解1.类的引入2.类的定义3.类的访问限定符及封装(面试题)4.类的作用域5.类的实例化6.类对象模型三.结构体内存对齐规则(面试题)四.this指针1.this指针的特性2.this指针的(面试题)一.面向过程和面向对象......
  • OOP篇(Java - 抽象类、类、对象、构造器、接口、内部类、 代码块、枚举)(doing)
    目录一、抽象类1.简介2.什么时候定义抽象类?3.什么是抽象方法?4.抽象类的作用是什么?5.继承抽象类需要做什么?6.抽象类为什么不能创建对象?自己干什么,创建对象毫无意义7.final和abstract是什么关系?二、类1.简介2.表示类关系的UML符号3.类的组成4.如何定义......
  • Django:F对象和Q对象
    一、F对象之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?作用:用于类属性之间的比较#使用之前需要先导入fromdjango.db.modelsimportF#查询阅读量大于等于评论量的新闻NewsInfo.objects.filter(read__gte=F('comment'))可以在F对象上使用算数运算#查......
  • Linux安装MQTT 服务器(图文教程)
    MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,专为低带宽和不稳定的网络环境设计,非常适合物联网(IoT)应用。官网地址:https://www.emqx.com/一、版本选择根据自己的操作系统进行下载即可,推荐使用rpm安装方式。下载地址:https://www.emqx.com/zh/do......
  • C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机
    一个简单的有限状态机可以有如下内容1.状态基类(定义基本状态的方法,如进入(Enter)、执行(Execute)和退出(Exit),同时可以在此声明需要被管理的对象)2.具体状态类(定义具体状态,如:跳跃,行走,待机,每个具体状态类继承自状态基类)3.管理状态类(负责管理状态的切换逻辑,确保在不同状态之间进行......
  • python基础语法 010 类和对象-6-1 继承定义
    前提:    在真实世界中,类型之间可能存在范围包含关系,比如:人这个类型和亚洲人这个类型。        人是包括了亚洲人的,如果某人是员工亚洲人,那么它必定是一个人        这种关系,在编程语言中称为继承关系        比如上面例子:亚洲人这个类就继......