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

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

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

相关文章

rust feature 简介

Rust 的 feature 是一种机制&#xff0c;用于在编译时选择性地启用或禁用代码的某些部分。通过 feature&#xff0c;你可以在 Cargo.toml 中定义哪些功能需要启用&#xff0c;并在代码中通过条件编译来控制代码的编译与否。下面是 feature 机制的详解&#xff1a; 1. 基本概念…

设计模式 18 备忘录模式

设计模式 18 创建型模式&#xff08;5&#xff09;&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式&#xff08;7&#xff09;&#xff1a;适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

c# 笔记 winform添加右键菜单,获取文件大小 ,多条件排序OrderBy、ThenBy,list<double>截取前5个

Winform右键菜单‌ 要在C# Winform应用程序中添加右键菜单&#xff0c;‌你可以按照以下步骤操作&#xff1a;‌ 1.‌创建菜单项‌ 在Form的构造函数或加载事件中&#xff0c;‌创建ContextMenuStrip控件的实例&#xff0c;‌并为其添加菜单项。‌ 2.‌绑定到控件‌ 将Con…

tcp 流量控制

TCP流量控制是TCP/IP协议中用于控制发送方和接收方之间数据传输速率的一种机制&#xff0c;以防止网络拥塞和确保网络资源的有效利用。流量控制主要通过调整TCP窗口大小来实现&#xff0c;确保发送方不会发送超出接收方处理能力的数据量。以下是TCP流量控制的关键概念和工作原理…

c++ websocket简单讲解

只做简单讲解。 一.定义和原理 WebSocket 是从 HTML5 开始⽀持的⼀种⽹⻚端和服务端保持⻓连接的消息推送机制&#xff0c;传统的 web 程序都是属于 "⼀问⼀答" 的形式&#xff0c;即客⼾端给服务器发送了⼀个 HTTP 请求&#xff0c;服务器给客⼾端返回⼀个 HTTP 响…

Java 入门指南:Java 并发编程 —— 并发容器 PriorityBlockingQueue

BlockingQueue BlockingQueue 是Java并发包&#xff08;java.util.concurrent&#xff09;中提供的一个阻塞队列接口&#xff0c;它继承自 Queue 接口。 BlockingQueue 中的元素采用 FIFO 的原则&#xff0c;支持多线程环境并发访问&#xff0c;提供了阻塞读取和写入的操作&a…

视频汇聚平台LntonAIServer视频质量诊断功能--偏色检测与噪声检测

随着视频监控技术的不断进步&#xff0c;视频质量成为了决定监控系统性能的关键因素之一。LntonAIServer新增的视频质量诊断功能&#xff0c;特别是偏色检测和噪声检测&#xff0c;进一步强化了视频监控系统的可靠性和实用性。下面我们将详细介绍这两项功能的技术细节、应用场景…

【AI】Pytorch_损失函数优化器

建议点赞收藏关注&#xff01;持续更新至pytorch大部分内容更完。 本文已达到10w字&#xff0c;故按模块拆开&#xff0c;详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 损失函数创建损失函数 &#xff08;共18个&#xff09;nn.CrossEnt…

【openwrt-21.02】T750 openwrt MT7916 WPS PBC功能实现

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

MySQL数据备份策略监控:实现方法与最佳实践

数据备份是数据库管理中的重要环节&#xff0c;它确保了在数据丢失或损坏的情况下能够恢复数据。在MySQL中&#xff0c;实施有效的数据备份策略监控对于保障数据安全和业务连续性至关重要。监控不仅可以帮助及时发现备份过程中的问题&#xff0c;还可以确保备份数据的完整性和可…

iOS 收集打印日志

可以将要在Xcode 控制台打印的日志写在沙盒&#xff0c;最后导出分享&#xff0c;进行问题分析。 正式版本不建议使用&#xff0c;避免增加用户内存。配合解决顽固 Bug 可以通过该方法收集打印日志 .h头文件 interface LogManager : NSObject(FSLogManager *)shareInstance; -…

【多场景应用】基于杰发科技AC7840x的Mini LED背光驱动设计

应用场景&#xff1a; 在汽车应用中&#xff0c;Mini LED背光驱动设计主要用于仪表盘、中控屏和车载娱乐系统等显示屏。这项技术可以显著提升显示效果&#xff0c;提供更高的亮度、更深的黑色和更广的色域&#xff0c;使得图像更加生动逼真&#xff0c;尤其在强光和宽温度范围…

Redis 篇-深入了解查询缓存与缓存所带来的问题(读写不一致、缓存穿透、缓存雪崩、缓存击穿)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 本章目录 1.0 什么是缓存 2.0 项目中具体如何添加缓存 3.0 添加缓存后所带来的问题 3.1 读写不一致问题 3.1.1 缓存更新策略 3.1.2 具体实现缓存与数据库的双写一致 3.2 缓存穿…

【日记】想见珍一面怎么就这么难(985 字)

正文 想见珍一面怎么就这么难…… 事故频发。昨天说考试时间跟机票时间冲突了&#xff0c;最后结果出来了&#xff0c;改签了&#xff0c;并且差价不补。我不干&#xff0c;他们也不干。因为上级行给我们行长施压&#xff0c;于是我们行长给我施压。最后要到了国庆之前拔智齿的…

詳細解析軟路由與代理爬蟲池-okeyproxy

什麼是軟路由&#xff1f; 軟路由&#xff0c;顧名思義&#xff0c;就是通過軟體實現的路由器功能。與傳統的硬體路由器不同&#xff0c;軟路由通常是基於PC或單板電腦&#xff08;如樹莓派&#xff09;運行的路由器軟體。 靈活性高&#xff1a;可以根據需求安裝各種插件和服…

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

有需要题库的可以看主页置顶 V群仅进行学习交流 1.转发表中 FLAG 字段中B 的含义是&#xff1f; A、可用路由 B、静态路由 C、黑洞路由 D、网关路由 答案&#xff1a;C 解析&#xff1a; 可用路由用U 表示&#xff0c;静态路由用 S 表示&#xff0c;黑洞路由用 B 表示&#x…

网站一些标识

1.网站TDK大三标签SEO优化 SEO(Search engine optimzation) 汉译为搜索引擎优化&#xff0c;是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。 ​ SEO的目的是对网站进行深度的优化&#xff0c;从而帮助获取免费的流量&#xff0c;进而在搜索引擎上提升网站…

笔试,牛客.kotori和n皇后​,牛客.AOE还是单体

目录 牛客.kotori和n皇后​编辑 牛客.AOE还是单体 牛客.kotori和n皇后 想起来&#xff0c;我之前还写过n皇后的题&#xff0c;但是这个我开始只能想到暴力解法 判断是不是斜对角线&#xff0c;联想yxb和y-xb,假如在一条线上&#xff0c;那么他们的x和y会对应成比例&#xff0c…

【弱监督时间动作定位】Probabilistic Vision-Language Representation for WSTAL 论文阅读

Probabilistic Vision-Language Representation for Weakly Supervised Temporal Action Localization 论文阅读 Abstract1 Introduction2 RELATEDWORK2.1 Weakly Supervised Temporal Action Localization2.2 Vision Language Pre-training2.3 Probabilistic Representation 3…

RocketMQ高级特性四-消息过滤

目录 前言 Broker端过滤 定义与概述 消息过滤分类 原理机制 使用场景 优缺点 Java代码示例 - Tag过滤 Java代码示例 - SQL92过滤 客户端过滤 定义与概述 原理机制 使用场景 优缺点 Java代码示例 总结 前言 消息过滤是RocketMQ的一项高级特性&#xff0c;它允许…