Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成

2024-09-03 17:20

本文主要是介绍Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt 字符串的编码方式

问题

总所周知,Qt的ui文件在编译时,会自动生成一个ui_xxxxx.h的头文件,打开一看,其实就是将摆放的控件new出来以及布局的代码。
在这里插入图片描述

只要用Qt提供的uic.exe工具,自己也可以将ui文件输出为代码文件。

在Qt安装目录所对应编译器的bin文件夹下,就能找到uic.exe
我这里路径是

C:\Qt\Qt5.9.8\5.9.8\msvc2015\bin

在这里插入图片描述

我们只需要用同目录下的designer.exe,设计好布局及控件,然后使用uic工具就能生成出代码

uic.exe test.ui -o ui_test.h

-o 的意思是output输出为文件,如果不加后面的,则会直接在控制台打印。

在这里插入图片描述

这边我已经准备了一个ui文件,并输出至ui_test.h

打开它我们可以看到

/********************************************************************************
** Form generated from reading UI file 'test.ui'
**
** Created by: Qt User Interface Compiler version 5.9.8
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/#ifndef UI_TEST_H
#define UI_TEST_H#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Form
{
public:QVBoxLayout *verticalLayout;QPushButton *pushButton;QPushButton *pushButton_2;void setupUi(QWidget *Form){if (Form->objectName().isEmpty())Form->setObjectName(QStringLiteral("Form"));Form->resize(400, 300);verticalLayout = new QVBoxLayout(Form);verticalLayout->setObjectName(QStringLiteral("verticalLayout"));pushButton = new QPushButton(Form);pushButton->setObjectName(QStringLiteral("pushButton"));QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);sizePolicy.setHorizontalStretch(0);sizePolicy.setVerticalStretch(0);sizePolicy.setHeightForWidth(pushButton->sizePolicy().hasHeightForWidth());pushButton->setSizePolicy(sizePolicy);verticalLayout->addWidget(pushButton);pushButton_2 = new QPushButton(Form);pushButton_2->setObjectName(QStringLiteral("pushButton_2"));sizePolicy.setHeightForWidth(pushButton_2->sizePolicy().hasHeightForWidth());pushButton_2->setSizePolicy(sizePolicy);verticalLayout->addWidget(pushButton_2);retranslateUi(Form);QMetaObject::connectSlotsByName(Form);} // setupUivoid retranslateUi(QWidget *Form){Form->setWindowTitle(QApplication::translate("Form", "Form", Q_NULLPTR));pushButton->setText(QApplication::translate("Form", "\346\265\213\350\257\225\346\214\211\351\222\256", Q_NULLPTR));pushButton_2->setText(QApplication::translate("Form", "\342\234\205\346\265\213\350\257\225\345\220\204\347\247\215\346\240\274\345\274\217\360\237\215\2602024-09-03 14:03:16", Q_NULLPTR));} // retranslateUi};namespace Ui {class Form: public Ui_Form {};
} // namespace UiQT_END_NAMESPACE#endif // UI_TEST_H

代码很简单,主要就是一个setupUi函数,用来建立布局及控件。
一个retranslateUi函数用来处理控件的文本显示内容

现象

当我们查看文本显示的内容,会发现该内容和ui文件中的完全不同,例如

测试按钮
对应为
\346\265\213\350\257\225\346\214\211\351\222\256

✅❎测试各种格式✓✕2024-09-03 14:03:16
对应为
\342\234\205\346\265\213\350\257\225\345\220\204\347\247\215\346\240\274\345\274\217\360\237\215\2602024-09-03 14:03:16

而且编码后的文本内容,在Qt的代码中可以直接设置该文本,并且可以显示为对应编码的原文本。

例如,我在setText的时候直接设置

\344\275\240\345\245\275\357\274\214\346\234\250\351\243\216\345\217\257\345\217\257

这么一串字符串,输出的直接就是中文文本。

在这里插入图片描述

编码解析

所以这到底是什么一种什么编码格式呢?下面为你解析。

首先,在用uic文件进行代码生成的时候,我们可以看到英文字母及标点符号,是不会进行上面这样的编码的,就像下面。
在这里插入图片描述

而其他的字符则会,编码成对应的 \234\456 这样的文件。

其实就是在ASCII表内的字符是以原文本的方式进行保存。

ASCII码对照表

而其他部分则是进行了一个编码。

编码方式,我们现在以“ 你好” 为例。

你好

我们如果将该字符串以url方式进行一个编码,则会得到

%E4%BD%A0%E5%A5%BD

接下来我们将 % 换成 \ ,并将上面从16进制转为8进制,则会得到

\344\275\240\345\245\275

这串字符,则和Qt所生成的完全相同。

通过对QString进行遍历打印出QChar,我们可以得知QString是以unicode方式进行存储。

在这里插入图片描述

八进制数的表达方法!八进制数在转义符中的使用!

通过该文章,我们也可以知道 \ 加 八进制数 是起到一个转义的作用。

示例代码

我这边也编写了一个Qt字符串的编码工具开源给大家,可以方便的进行字符串原文本与编码文本直接的相互转换。

在这里插入图片描述

GitHub 仓库地址
https://github.com/sorrowfeng/qt-string-coding

这篇关于Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133560

相关文章

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理