QT5.14.2版本中QString、QByteArray以及中文编码

QTextDocument 入门 * 实现布局逻辑 */// 设置自定义边框QTextCharFormat 是 Qt 框架中用于描述文本字符格式的类,属于 QtGui 模块。它用于设置和获取文本的视觉属性,如字体、颜色、背景等。 阅读详情
  • Qt中字符串常用的类型
类型介绍
QStringQString想当于std中的string,在使用时不用像char *那样担心会超出范围或者漏写一个’\0’,这一切的工作C++会帮你处理好。你只需要正确使用Qt中提供的各种方法、函数接口即可。
QByteArray字面意思,字节数组,就比如使用char [];不同的是QByteArray返回大小时,不会考虑到最终’\0’的一个字节大小

一、QString用法

~···

QString具体用法参考:https://blog.youkuaiyun.com/yc__coder/article/details/107261092

~···

二、QByteArray用法

1、简介

字节数组,主要存放二进制数组。它与char []相同,但是更容易使用。和QString同级。

2、基本函数

.data()

    QByteArray array("helloooo");
    char * data = array.data();
    qDebug() << data;		//helloooo

输出helloooo,注意⚠️这里是没有双引号的。
因为这里直接就当作是一个 data[] 数组来处理了。

.fill()

    QByteArray array("helloooo");
    array = array.fill('c');		//按照当前大小全部改为c
    qDebug() << array;		//"cccccccc"

    QByteArray array("helloooo");
    array = array.fill('c',3);		//改三个字符为c,其余的全部删除
    qDebug() << array;		//"ccc"

QByteArray::fill(char c, int size = -1)是原型,所以默认是-1,也就是默认大小不改变,否则大小改成指定大小,这个函数和QString::fill功能相同。

.indexOf()

    QByteArray array("hellooolo");
    int flag = array.indexOf('l');
    std::cout << flag << std::endl;		//2

    QByteArray array("hellooolo");
    int flag = array.indexOf('l',4);
    std::cout << flag << std::endl;		//7

QByteArray::indexOf(char c, int from = 0)原型,后面的from是指从第几索引开始计算。 默认是0,也就是第一个字符开始。

.isEmpty() && .isNull()

    QByteArray array;
    qDebug() << array.isNull() << array.isEmpty();	//true true

    QByteArray array("");
    qDebug() << array.isNull() << array.isEmpty();	//false true

当isEmpty为true时,isNull肯定为true,这和QString也是一样的。

::number()

    qDebug() << QByteArray::number(2020);		//"2020"

用法和QString相同,原型为QByteArray::number(int , int base = 10)整形,配上进制数,默认为十进制,范围在 [2, 36]。

.toDouble() && .toFloat() && .toInt()

    QByteArray array("2020.3232323");
    std::cout << array.toDouble() << std::endl;		//2020.32

    QByteArray array("2020.3232323");
    std::cout << array.toFloat() << std::endl;		//2020.32

    QByteArray array("2020.3232323");
    std::cout << array.toInt() << std::endl;		//0

    QByteArray array("2020");
    std::cout << array.toInt() << std::endl;		//2020

.setNum()

    QByteArray array;
    array.setNum(2020);
    qDebug() << array;		//"2020"

具体不阐述,原型QByteArray::setNum(int , int base = 10)

.size()

    QByteArray array("helloooo");
    std::cout << array.size() << std::endl;		//8

不解释

三、中文编码

引言

QString对字符串使用unicode编码。

unicode编码:具体参考网页 Unicode_百度百科

Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

举例感知编码方式差异

  1. 例一
    QString str("先挣一个亿");
    qDebug() << str;
    qDebug() << str.toUtf8();
    qDebug() << str.toLatin1();
    qDebug() << str.toLocal8Bit();
    qDebug() << str.unicode();

输出如下

"先挣一个亿"
"\xE5\x85\x88\xE6\x8C\xA3\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\xBF"
"?????"
"\xE5\x85\x88\xE6\x8C\xA3\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\xBF"
0x7fabb370e338

在编译时,进程将汉字直接存储到str中,没有进行编码工作;如果直接读取str也是不进行编码工作的,所以进去什么样出来也就什么样。可以想象,在执行构造函数时,QString将汉字变为遗传二进制保存,在读取str时也是将这串二进制解读,但是如果调用编码方式,反而会改变原序列,那么就容易出现乱码。

再看下一例子。

  1. 例二
    QString str = QString::fromLatin1("先挣一个亿");
    std::cout << str.data() << std::endl;
    std::cout << str.toUtf8().data() << std::endl;
    std::cout << str.toLatin1().data() << std::endl;
    std::cout << str.toLocal8Bit().data() << std::endl;
    std::cout << str.unicode() << std::endl;

输出

0x7fec685093f8
å
ˆæŒ£ä¸€ä¸ªäº¿
先挣一个亿
å
ˆæŒ£ä¸€ä¸ªäº¿
0x7fec685093f8

将str保存为Latin编码方式,输出时在再转码。

C++/Qt高薪项目实战:工业级应用开发核心技术解析 C++作为高性能系统编程语言,凭借其零成本抽象和底层硬件控制能力,在需要极致性能的领域占据核心地位。其内存管理、模板元编程等特性使开发者能够构建高效、稳定的复杂系统。Qt框架则提供了强大的跨平台GUI开发能力,通过信号槽机制、模型/视图架构等设计,极大地提升了桌面和嵌入式应用的开发效率。两者的结合在工业自动化、汽车电子、医疗器械等高壁垒行业展现出巨大技术价值,能够满足复杂业务逻辑、高性能计算和严苛稳定性要求。本文以工业监控系统为例,深入剖析如何运用现代C++特性与Qt框架精髓,解决多线程数据同步、实时可视化 阅读详情

相关推荐

Qt Creator菜单栏消失的终极修复指南:从快捷键冲突到设置恢复

本文详细解析了Qt Creator菜单栏消失的常见原因及修复方法,包括快捷键冲突排查、配置文件重置和界面模式切换等解决方案。特别针对Qt开发者遇到的菜单栏显示问题,提供了从简单快捷键操作到深度配置修改的全方位指南,帮助用户快速恢复Qt Creator的正常使用。

weixin_27240351的博客 338

基于QT框架的C++游戏登录器开发:从架构设计到网络通信实战

在桌面应用开发中,GUI框架的选择直接影响开发效率和跨平台能力。QT框架以其成熟的信号与槽机制、丰富的内置库和真正的跨平台特性,成为C++项目客户端开发的优选方案。其技术价值在于实现了高内聚低耦合的架构设计,通过事件驱动模型优雅处理多线程通信,显著提升工程化水平。在游戏开发领域,客户端登录器作为连接用户与服务器的关键入口,需要综合解决网络通信、协议封装、UI交互和本地配置管理等核心问题。本文结合C++游戏服务器项目实践,深入探讨了如何利用QT构建健壮的登录器,其中网络模块的异步通信封装和基于Protobuf

weixin_30325971的博客 375

ENVI遥感数字图像处理方法(一)

文章目录1.查看图像的空间分布特征(一)生成灰度图像(二)生成假彩色图像(三)连接不同视图的影像2.查看图像的像元灰度值3.统计并查看图像直方图 1.查看图像的空间分布特征 在打开一幅遥感影像时,有两个文件,我们要选择数据文件来打开。 打开过后,点击Data Manager,查看该影像的波段 该影像共有6个波段 (一)生成灰度图像 步骤如下: (二)生成假彩色图像 先生成一个一般的假彩色图像: 再生成一个标准假彩色图像,将其存放在一个新的视图中: 标准假彩色图像波段构成为:近红外、红光波段、绿

江昊东的博客 5万+

QByteArray中的中文(GBK/UTF-8)转成unicde(中文乱码处理)

QByteArray中的中文(GBK/UTF-8)转成unicde(中文乱码处理)

ken2232的博客 887

SeaTunnel 实战:Apache SeaTunnel Web 安装与部署

复制引擎服务中配置文件到 Web 配置目录下面。就是上述 application.yml 文件中配置的端口号。默认是从 mvvm 下载,可能下载速度很慢,我这边安装了 Maven 并且配置了阿里云仓库,因此将脚本中的。如果环境变量有冲突需要改下环境变量的名字以及 init_sql.sh 中的环境变量的名字,可以加上前缀。初始化数据库有两种方式,一是使用官方提供的初始化脚本,二是直接运行初始化 SQL。初始化数据库的脚本,使用之前需要修改。

SmartSi 3910

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退

此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。

DN金猿的博客 1173

Qt5通信 QByteArray接收中文字符 出现乱码 解决方法

在写qt网口通信的过程中,遇到中文就乱码。解决方法如下: 1.头文件添加 #include <QTextCodec> 2.代码如下 #include <QTextCodec> QByteArray data= tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString str = tc->toUnicode(data);//str如果是中文则是中文字符 .

枫影竹韵的博客 4604

2021年全网最细 VirtualBox 虚拟机安装 Ubuntu 20.04.2.0 LTS及Ubuntu的相关配置

目录一、VirtualBox 虚拟机的安装1. VirtualBox 的下载和安装2. 设置 VirtualBox 存储文件夹3. 在 VirtualBox 创建虚拟机二、Linux 操作系统(Ubuntu)的安装1. Linux 操作系统(Ubuntu)的下载2. 安装 Ubuntu3. 启动 Ubuntu三、配置 Ubuntu1. 设置终端2. 设置共享剪贴板3. 设置共享文件夹 一、VirtualBox 虚拟机的安装 VirtualBox 是由德国 Innotek 公司开发,由 Sun Microsy

XAMO Lab|代码、调试与复盘笔记 2万+

Qt字符串编码如何处理

Qt字符串编码如何处理

m0_73443478的博客 1119

Allegro基本规则设置指导书之Spacing Region

当网络需要在Region中需要按照自身的规则匹配时,可以创建Region Class来匹配。Region也支持Class to Class规则,点击ok即可。Allegro基本规则设置指导书之Spacing Region。下面介绍基本规则设置指导书之Spacing Region。给创建好的Region 匹配一个规则。空白的地方创建一个Region。

weixin_54787054的博客 564

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 383

【环境配置】Windows 环境下 Qt 5.14.2 控制台中文乱码问题

解决 Windows 环境下 Qt 5.14.2 控制台中文乱码问题 摘要:本文记录了Qt 控制台 中文字符无法正常显示的解决流程。 关键点:环境配置 1. 编码格式 “utf-8” 确保Qt文件编码格式正确。 2. 查看控制台属性 在控制台,右击打开属性页,查看:当前代码页。即表示当前控制台是以GBK编码格式显示的,与utf-8 格式不符,自然无法正常显示中文。 3. 修改注册表中Qt的 CodePage值 打开注册表 cmd: regedit 找到该界面,在当前用户中找到控制台(cons

qq_41958529的博客 2905

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1495

QByteArray显示中文

首先有一个txt的文本文件,内部有中文,一般情况下这样的中文是以GBK标准编码的,除非你在存储的时候显式地存为Unicode。直接通过QFile,然后读取QByteArray,会发现在命令行里面显示出来的是乱码,那是因为Qt默认情况下会以ASCII编码来解释字符串的,这个时侯我们就需要对字符产编码进行转化,QTextCodec类可以很好的帮助我们完成这一任务。首先包含头文件:#includ

xiaoyangger的专栏 7486

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt开发经验 --- 避坑指南(5)

Qt开发经验、编码问题

mahuifa的博客 1668

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Qt C++表格控件实现Excel文件读写与编辑的完整方案

表格数据处理是现代软件开发中的基础需求,Qt框架的QTableWidget和QTableView控件提供了强大的二维数据展示能力。通过集成Excel解析库,开发者可以实现从Excel导入数据、界面编辑、再导出的完整流程。这种技术方案的核心价值在于实现本地化部署,不依赖Office软件,支持跨平台运行,特别适合数据录入系统、报表工具等离线处理场景。在实际工程实践中,QtXlsx等第三方库与Qt表格控件的结合,能够高效处理xlsx格式文件,通过分批读取机制优化大文件加载性能。该方案将复杂的Excel操作封装为简

weixin_33937778的博客 2112

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度解析Notepad--跨平台编辑器的5大技术优势与实现原理

Notepad--是一款基于C++和Qt框架开发的跨平台文本编辑器,支持Windows、Linux和Mac操作系统。作为国产软件的可替代方案,该项目专注于为中文开发者提供功能全面、性能优异的编辑器解决方案,特别针对国产信创UOS系统和Linux环境进行了深度优化。在本文中,我们将深入探讨Notepad--的技术架构、核心功能模块以及在实际开发中的应用价值。 ## 📋 项目概述:国产跨平台编辑器

gitblog_00097的博客 415

基于IMX6ull的车载系统

本文介绍了一个基于NXP i.MX6ULL处理器的智能车载信息系统设计。系统采用嵌入式Linux平台,集成了多媒体播放、GPS导航、倒车影像、环境监测等核心功能。硬件平台使用正点原子开发板,软件架构基于Qt框架,采用模块化分层设计。重点阐述了天气预报模块的实现,包括UI设计、HTTP网络请求和JSON数据解析流程。系统通过侧边栏导航和堆栈式页面布局,提供直观友好的交互体验,为智能座舱开发提供了实践参考。

m0_68214818的博客 1118

VS+Qt程序中文乱码解决方案

因为VS的默认编码格式是GBK的,但QT的默认编码格式却是UTF-8`. 1.最好用最便捷的方法 在中文字符的引号前增`u8` 示例:`m_label = new QLabel(u8"点检完成 检测结果[NG]", this);` 缺点:无法与qt的tr功能配合使用,tr会无法识别u8中所需要翻译的文字 2.仅需在对应的项目头文件中加上一下代码即可解决乱码问题 ```javascript #ifdef WIN32 #pragma execution_character_set("utf-8") #en

weixin_42464350的博客 1496

Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题

代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下;但是如果设置了全局的utf-8,再用以前的方法: QByteArray ba=aaa.toLatin1(); const char *c_str = ba.data(); PS:c_str所指向的内存单元,如果你想长时间使用你应该复制出来,要不可能过数行代码后,你

xyyangkun的专栏 1万+

qt5.14.2 该文件包含不能在当前代码页(936)中表示的字符

warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。 忽略警告,但是问题还在 (1)找出警告的文件,然后在该文件的开始处加入下面的语句: #pragma warning (disable:4819) (2)如果是 VS IDE,还可以:在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Spe

Clement 1万+

【问题集锦·亲测有效!!】QT <5.14.2> mingw项目 转 MSVC编译报错 + 通过VS2022编译【一站式解决方案】

该项目一开始是QT 5.14.2 开发的,选择的是mingw 32/64环境,研发/编译一切正常。 但通过msvc或者是vs2022编译各种报错。经过一下午的调试,终于OK。 【一站式解决方案】特此将解决路径和亲测有效的方案奉上,希望能够帮助到大家!

乐亦Lee的博客 5080

Qt5默认编码

Qt5默认编码格式: unicode. 默认情况下,Qt5可以正确解析utf-8格式编码,并将其自动转换为unicode编码. 其它格式(如gbk)需要进行转换,否则会出现乱码. 转换程序: QTextCodec *codec = QTextCodec::codecForName("GBK"); QString str = codec->toUnicode("gbk中文数据"); ...

quietbxj的博客 1146

QString编码

代码是Unicode编码的,我们不用做其他的处理。QString内部使用utf-16编码格式也叫Unicode编码格式,意味着用户必须给Unicode格式的数据给QString,如果数据是GBK格式的,用户需要使用QString::fromLocal8Bit()转换为Unicode编码。注意:Local8Bit它代表本系统的编码,有可能不是GBK编码,上述我使用了windos指令验证了我的windos使用GBK编码,因此Local8Bit == GBK。

weixin_58004346的博客 2312

qt 中文乱码 处理QByteArray类型里含中文的数据

qt解析tcp通信传来的xml时,中文有乱码 解决方法: 头文件添加 #include QByteArray tmpQBA = m_pSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString tmpQStr = tc->toUnicode(tmpQBA); //

gllg1314的专栏 1万+
上一篇: C语言的十种排序算法
下一篇: Qt5绘制方法——QPointer常用方法
巨蟹贼香
博客等级 码龄9年 76粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值