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

news2024/11/17 22:19:24

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_NAMESPACE

class 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);
    } // setupUi

    void 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 Ui

QT_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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day17JS-Cookle、webStorage和Promise

1. 什么是Cookle 在网页中需要向当前电脑中存储一些数据&#xff0c;通过cookie可以存储。 Cookie &#xff1a;是一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件&#xff0c;用于识别用户身份、跟踪用户活动、保存用户设置等。它通常包括名称、值、域名、…

云服务器+docker:还在为项目上线苦恼?一文包你解决(保姆级教程,图文并茂,万字起步!!!)

目录 Blue留言机&#xff1a; 学习视频以及参考资料 &#xff1a; 1、学习之前的必备操作&#xff1a; 第一步&#xff1a;购买服务器 选择一台免费的云服务器&#xff08;包白嫖的&#xff09; 配置服务器的一点说明&#xff1a; 查看自己是否购买成功&#xff1a; 第…

解决UOS开发截图时电脑滴滴声

在使用import命令截图时&#xff0c;电脑会伴随滴滴声&#xff0c;影响程序使用体验&#xff0c;使用 sudo rmmod pscpkr 即可解决滴滴声&#xff0c;这个命令每次开机&#xff0c;重新运行程序时都需输入&#xff0c;因此需要在脚本文件中自动执行&#xff0c;但是sudo命令需…

Tomcat8版本以上配置自定义400错误页面

问题&#xff1a;当请求URL包含特殊字符时&#xff0c;Tomcat会自动拦截并返回400状态码页面&#xff0c;暴露了tomcat的版本信息&#xff0c;这是很严重的安全漏洞。 java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 解…

Kafka【六】Linux下安装Kafka(Zookeeper)集群

Kafka从早期的消息传输系统转型为开源分布式事件流处理平台系统&#xff0c;所以很多核心组件&#xff0c;核心操作都是基于分布式多节点的。本文这里采用三台虚拟机模拟真实物理主机搭建Zookeeper集群和kafka集群。 VMware可以使用户在一台计算机上同时运行多个操作系统&…

符合全真彩的简单完美正方形

符合全真彩的简单完美正方形&#xff0c;像素&#xff1a;4096x4096、颜色&#xff1a;16,777,216。 原图可透过 https://linxinglu.com/art/#245.png 访问 &#xff0c;除了分辨率 4096x4096&#xff0c;也就是 16777216 像素&#xff0c;颜色数量也恰好是 16777216&#xff0…

静态字段和静态方法

1. 静态字段 1. 用static修饰的字段。 2. 实例字段在每个实例中有自己的独立”空间“&#xff0c;静态字段只有共享”空间“&#xff0c;所有实例共享该字段。 3. 使用”类名.静态字段“调用静态字段&#xff0c;静态字段不属于实例&#xff0c;是类class本身的…

四川财谷通抖音小店创新引领新风尚

在数字化浪潮的推动下&#xff0c;电商行业蓬勃发展&#xff0c;抖音小店作为新兴的电商平台&#xff0c;凭借其独特的社交属性和便捷的购物体验&#xff0c;迅速赢得了广大消费者的青睐。在众多抖音小店中&#xff0c;四川财谷通抖音小店以其精准定位、高质量内容、一站式服务…

iLogtail 开源两周年:社区使用调查报告

作者&#xff1a;玄飏 iLogtail 作为阿里云开源的可观测数据采集器&#xff0c;以其高效、灵活和可扩展的特性&#xff0c;在可观测采集、处理与分析领域受到了广泛的关注与应用。在 iLogtail 两周年之际&#xff0c;我们对 iLogtail 开源社区进行了一次使用调研&#xff0c;旨…

http连接处理(最新版)

分析http类及请求接收 基础 epoll epoll_create函数 #include <sys/epoll.h> int epoll_create(int size) 创建一个指示epoll内核事件表的文件描述符&#xff0c;该描述符将用作其他epoll系统调用的第一个参数&#xff0c;size不起作用。 epoll_ctl函数 #include …

程序设计—房屋租赁系统 项目源码31279

摘 要 在当今社会&#xff0c;随着城市化进程的不断加速&#xff0c;房屋租赁市场的需求日益增长。然而&#xff0c;传统的房屋租赁方式存在信息不对称、租房过程繁琐等问题&#xff0c;因此需要建立一套高效、便捷的房屋租赁系统来满足用户的需求。通过深入研究房屋租赁市场的…

华为 HCIP-Datacom H12-821 题库 (8)

有需要题库的可以看主页置顶 V群仅进行学习交流 1.在 DHCP 运行过程中&#xff0c;如果客户端 IP 地址在相约过去 87.5%还没有完成续约的话&#xff0c;客户将发送什么报文进行再次续约&#xff1f; A、DHCP discover 广播报文 B、DHCP release 单播报文 C、DHCP request 广播…

探索MongoDB的Python之钥:pymongo的魔力

文章目录 探索MongoDB的Python之钥&#xff1a;pymongo的魔力背景&#xff1a;为什么选择pymongo&#xff1f;简介&#xff1a;pymongo是什么&#xff1f;安装&#xff1a;如何将pymongo纳入你的项目&#xff1f;基础用法&#xff1a;五个核心函数介绍1. 连接到MongoDB2. 选择数…

基于数字孪生搭建的智慧地铁站管理平台

数字孪生技术是指通过数学模型和实时数据同步反映实体系统运行状态的数字复制品建模。在智慧地铁站管理中&#xff0c;数字孪生技术的应用使得地铁站的运营管理更加高效、智能化&#xff0c;并提升了安全性和服务质量。以下是古河云科技小编整理的数字孪生搭建的智慧地铁站管理…

【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识1——常用软件的基本操作

一、前期准备 成功安装麒麟系统&#xff08;本次实验的安装的系统是&#xff1a;Kylin-Desktop-V10-SP1&#xff09; &#xff09; 二、学习内容 提示&#xff1a;学习麒麟Kylin-Desktop-V10-SP1系统自带软件的基本操作&#xff0c;包括开始菜单、设置、归档管理器、文件管理器…

hive on spark 合并小文件

最近在做用户画像相关的数据开发&#xff0c;在hive中做行转列的过程中&#xff0c;每个标签即tag在写入hive表时&#xff0c;有大量的小文件生成&#xff0c;通过增加参数解决了小文件过多的问题&#xff0c;但是在完成特殊要求--&#xff08;因后续需要同步ck&#xff0c;ck也…

英伟达RTX 50系显卡功耗曝光:5090比上代激增33%、性能比4090高70%,爆料来自于kopite7kimi。

在科技爱好者翘首以盼的9月4日&#xff0c;一则来自国际知名媒体的深度报道犹如一枚重磅炸弹&#xff0c;在显卡领域掀起了轩然大波。据该报道透露&#xff0c;英伟达正紧锣密鼓地筹备其下一代旗舰级显卡——RTX 5090&#xff0c;其功耗之巨&#xff0c;直接跃升至前所未有的60…

如何让wave波形信号不显示全路径

Modesim仿真如何让wave信号不显示全路径 问题说明 在使用modesim仿真时&#xff0c;需要利用modesim的wave界面显示调试信号的波形&#xff0c;默认情况下wave栏的左边是显示抓捕信号的全路径的&#xff0c;如下图所示: 这种情况下&#xff0c;区分信号比较麻烦&#xff0c;如…

ArkUI-动画

ArkUI-动画 系统能力属性动画显式动画 关键帧动画转场动画路径动画粒子动画 资源调用GIF动画帧动画 三方库LottieSVG 提升动画的流畅度使用renderGroup概述使用约束 系统能力 属性动画 通过更改组件的属性值实现渐变过渡效果&#xff0c;例如缩放、旋转、平移等。支持的属性包…

解决el-table中使用el-input无法聚焦问题

在el-table中点击单元格时使用el-input或其他表单组件编辑单条数据。会出现聚焦不上的问题&#xff0c;需要手动点击才能够聚焦。究其原因是因为点击单元格时页面已自动聚焦到单元格&#xff0c;此时无法自动聚焦到对应的表单&#xff0c;需要手动设置。 <template><e…