QT C++(QT对象树与内存泄漏管理,QT中文乱码问题)

文章目录

  • 1. QT对象树与内存泄漏
  • 2. QT中文乱码

1. QT对象树与内存泄漏

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//通过代码构建界面//创建label标签QLabel* label=new QLabel(this);//this表示给当前这个对象指定父对象label->setText("Hello World 2");//QString 中存在c字符串转化为QString,这里会隐式类型转化
}Widget::~Widget()
{delete ui;
}

上述代码label没手动释放指针。但是在QT上并不会导致内存泄漏

其中关键在于在new 这个对象时传入了this指针,这个对象被挂到对象树上

在网页开发中也涉及类似的对象树(DOM),本质上也是一个N叉树。通过树形结构把界面上的各种元素管理起来。

具体的对象树如下图案例:
在这里插入图片描述
使用对象树,把这些内容组织起来目的就是在合适的时机将这些对象释放(在窗口关闭)

如果提前释放资源会导致对象树对应节点下的资源被释放

下面代码验证这个步骤:
创建新文件:
在这里插入图片描述
使用自定义的TestLabel继承原来的QLabel,保持原有的QLabel功能不变的情况下给TestLabel扩展新析构函数,在自定义对象析构时打印一个自定义日志,方便观察程序运行状况。

#ifndef TESTLABEL_H
#define TESTLABEL_H
#include <QLabel>class TestLabel : public QLabel
{
public://将自定义对象加到对象树上TestLabel(QWidget*parent);~TestLabel();
};#endif // TESTLABEL_H
#include "testlabel.h"
#include <iostream>TestLabel::TestLabel(QWidget*parent):QLabel(parent){}TestLabel::~TestLabel()
{std::cout<<"DEBUG:中文"<<std::endl;
}
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include "testlabel.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//通过代码构建界面//创建label标签
//    QLabel* label=new QLabel(this);//this表示给当前这个对象指定父对象
//    label->setText("Hello World 2");//QString 中存在c字符串转化为QString,这里会隐式类型转化TestLabel* test=new TestLabel(this);test->setText("Test");
}Widget::~Widget()
{delete ui;
}

在窗口销毁时会自动调用自定义类的析构函数,在控制台上打印信息。
在这里插入图片描述
由上面可知,项目并没有释放指针,在窗口销毁后自动释放了堆的控件,避免内存泄漏。但是可以看到这里的汉字出现了乱码

2. QT中文乱码

在计算机中不同字符集,每个汉字的大小不同。

目前表示汉字的方式有两种:

  1. GBK:使用2字节表示汉字(Windows)
  2. UTF-8:边长编码,表示一个符号使用的字节数有变化。一般一个汉字是三个字节(Linux)

如果字符串本质是utf-8的编码,但是控制台是按照gbk的方式解析显示的,就会出现乱码

在QT上,字符串的编码格式是和文件的编码格式决定的

解决方式:

  1. 使用QString数据结构代替string字符串,自动处理编码格式

  2. QT中提供了qDebug来打印信息,自动处理编码格式qDebug()<<"DEBUG:中文";

    QDebug是QT中的类,qDebug是宏,内部封装了QDebug

在这里插入图片描述

使用qDebug打印的调试日志,是可以统一关闭的,在发布时可以通过编译开关统一关闭打印日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599697.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp-设置UrlSchemes从外部浏览器H5打开app

需求&#xff1a;外部浏览器H5页面&#xff0c;跳转到uniapp开发的原生app内部。 1、uniapp内部的配置&#xff1a; &#xff08;1&#xff09;打开manifest->App常用其他设置&#xff0c;如下&#xff0c;按照提示输入您要设置的urlSchemes&#xff1a; &#xff08;2&am…

提取COCO数据集中特定的类—vehicle 4类

提取COCO数据集中特定的类—vehicle 4类 1 安装pycocotools2 下载COCO数据集3 提取特定的类别4 多类标签合并 1 安装pycocotools pycocotools github地址 pip install githttps://github.com/philferriere/cocoapi.git#subdirectoryPythonAPI2 下载COCO数据集 COCO官网下载2…

【Java多线程(4)】案例:设计模式

目录 一、什么是设计模式&#xff1f; 二、单例模式 1. 饿汉模式 2. 懒汉模式 懒汉模式-第一次改进 懒汉模式-第二次改进 懒汉模式-第三次改进 一、什么是设计模式&#xff1f; 设计模式是针对软件设计中常见问题的通用解决方案。它们提供了一种被广泛接受的方法来解决…

GEE数据集—— 2020 年全球森林覆盖图10 米的空间分辨率

简介 欧洲共同体联合研究中心的全球森林覆盖图以 10 米的空间分辨率提供了 2020 年森林存在和不存在的明确空间表示。 2020 年是欧盟 "关于在欧盟市场上提供和从欧盟出口与毁林和森林退化相关的某些商品和产品 "的条例&#xff08;EUDR&#xff0c;条例&#xff08…

vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户

1.后端返回的json数据结构为&#xff1a; {"message":"下载失败&#xff0c;下载文件不存在&#xff0c;请联系管理员处理&#xff01;","code":500} 2.vue 请求后台接口返回的 Blob数据 3.问题出现的原因是&#xff0c;正常其他数据列表接口&…

AcWing 1388. 游戏(每日一题)

原题链接&#xff1a;1388. 游戏 - AcWing题库 玩家一和玩家二共同玩一个小游戏。 给定一个包含 N 个正整数的序列。 由玩家一开始&#xff0c;双方交替行动。 每次行动可以在数列的两端之中任选一个数字将其取走&#xff0c;并给自己增加相应数字的分数。&#xff08;双方…

ctfshow web入门 命令执行 web53--web77

web53 日常查看文件 怎么回事不让我看十八 弄了半天发现并不是很对劲&#xff0c;原来我发现他会先回显我输入的命令再进行命令的回显 ?cnl${IFS}flag.php||web54 绕过了很多东西 基本上没有什么命令可以用了但是 grep和?通配符还可以用 ?cgrep${IFS}ctfshow${IFS}???…

hadoop分布式计算组件

什么是计算、分布式计算&#xff1f; 计算&#xff1a;对数据进行处理&#xff0c;使用统计分析等手段得到需要的结果 分布式计算&#xff1a;多台服务器协同工作&#xff0c;共同完成一个计算任务 分布式计算常见的2种工作模式 分散->汇总(MapReduce就是这种模式)中心调…

一起学习python——基础篇(8)

今天讲一下python的关键字。 关键字是什么&#xff1f;关键字是有特别意义的标识符&#xff08;编程语言事先定义好的&#xff09;&#xff0c;也叫保留字。关键字不能用作变量名&#xff0c;函数名&#xff0c;参数。 关键字有哪些&#xff1f;我大概列一下&#xff1a;if、…

KingbsaeES数据库分区表的详细用法

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 分区表是一种将大型数据库表拆分为更小、更可管理的部分的技术。它通过将表数据分散存储到多个物理存储单元中&#xff0c;可以提高查询和数据维护的性能&#xff0c;并优化对大型数据集的处理。本篇文章以kingbase为…

4月7号总结

java学习 一.正则表达式 定义&#xff1a;正则表达式是一种用于描述字符串模式的表达式&#xff0c;通常被用于文本搜索、匹配和替换。它是一种强大的工具&#xff0c;可以在文本处理和文本分析中进行复杂的匹配和操作。 通过字符串引用里面的方法matches&#xff0c;然后执行…

多输入多输出 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络…