当前位置: 首页 > news >正文

Qt QString与QChar总结

(一) QString

1 QString的简介

QString 是Qt 中的一个类,用于存储字符串,QString 没有父类。QString 存储的是一串字符,每个字符是一个 QChar 类型的数据。QChar 使用的是 UTF-16 编码,一个字符包含 2字节数据。

对于超过 65535的Unicode 编码,QString 使用两个连续的 QChar 字符表示。UTF-16是一种 Unicode编码,能表示汉字,在QString 字符串中一个汉字是一个字符。
QString 类定义了大量的接口函数用于字符串操作。QString 在 Qt类库中应用非常广泛,很多函数的参数是 QString 类型。QString 使用隐式共享减少内存占用,也就是只有在修改一个字符串的时候,这个字符串才会被复制。

2 QString创建和初始化

QString 是一个类,有多种构造函数,定义 QString 字符串的较简单方式是给它的构造函数信递一个const char 类型的数据。例如,下面的代码定 义了一个QString 对象str,并且初始化其字符串内容为 “Hello Qt”。

QString str = "Hello Qt";

在Qt Creator 中,所有源程序文件都默认使用 UTF-8 编码进行保存,所以,赋值语句右侧的“Hello Qt” 是一个C语言标准的 const char *类型的字符串,以“\0”作为结束符。 QString 会使用其静态函数 fromUtf8()将这个const char *类型的数据转换为 UTF-8 编码的字符串。

3 QString字符串的索引

QString 在被创建和初始化后,其存储的字符串就是一个QChar 字符数组,可以使用元素索引操作符 “[ ]” 或接口函数at()访问每个字符。QString 字符串内字符的索引序号是从0开始的。

4 QString字符串的拼接

  • (1)使用加法运算符可以直接将二个QSring字符串连接起来
  • (2)使用函数append()在当前的字符串后面添加字符串
  • (3)使用函数prepend()在当前的字符串前面添加字符串

5 QString字符串的截取

* (1)函数front()back()				分别返回字符串的第一个字符(str[0])和字符串最后一个字符
* (2)函数left(int n)right(int n)	分别返回字符串的左边第n个字符和字符串右边第n个字符
* (3)函数first(int n)last(int n)	分别返回字符串前n个字符和字符串后n个字符
* (4)函数mid(int position, int n = -1)	返回字符串position位置的后n个字符
QString QString::mid(int position, int n = -1) const
* (5)函数section()					从字符串提取以sep作为分隔符,从start段到end段字符串
QString section
(const QString &sep, int start, int end = -1, SectionFlags flags = SectionDefault) const

6 QString字符串的存储

*(1)函数isNull()和isEmpty()			判断字符串是否为空,区别QString("")相当QString("\0"),所以QString("\0"),对于QString ("").isNull()则为假
QString str1, str2 = "";
bool N = str1.isNull();			//true, 未赋值N = str2.isNull();			//false,已被赋值不为nullN = str1.isEmpty();		//trueN = str2.isEmpty();		//true
* (2)函数size(),length()和count()	前两者都返回字符串中字符个数,功能相同;count()不带参数表示与前二个功能相同,带参数表示某个字符串在当前字符串出现的次数
* (3)函数clear()					清空当前字符串
* (4)函数resize()					改变字符串长度,扩充字符串容量
* (5)函数fill()						将字符串中每个字符都用一个新的字符替换

7 QString字符串的搜索和判断

* (1)函数indexOf()lastIndexOf()	在字符串内部查找某个子字符串首次出现的位置
* (2)函数contains()					判断字符串是否包含某个子字符串
* (3)函数endsWith()startsWith()	判断字符串是否以某个字符开头和以某个字符结尾
* (4)函数count()					统计字符串里子字符串出现的次数

8 QString字符串的转换和修改

* (1)函数toUpper()toLower()		字符串转大写和小写
* (2)函数trimmed()simplified()	去掉字符串中首尾空格 和 把多个空格用单个空格替换
* (3)函数chop()						去掉末尾的n个字符,n是输入参数,如果n大于或等于字符串实际长度,则字符串会变为空
* (4)函数insert()					在字符串的某个位置插入一个字符串
* (5)函数replace()					从字符串的pos位置开始替换n个字符
* (6)函数remove()					从字符串的pos位置开始移除n个字符

(二) QChar

1 QChar的简介

QString 字符串中的每个字符都是QChar 类型的,QChar 也是一个类,它采用 UTF-16 编码表示字符。

2 QChar的主要的函数

bool isDigit() const 					判断字符是否为 0~9的数字
bool isLetter() const					判断字符是否为字母
bool isLetterOrNumber() const			判断字符是否为字母或数字
bool isLower() const					判断字符是否为小写字母
bool isUpper() const					判断字符是否为大写字母
bool isMark() const						判断字符是否为标记
bool isNonCharacter() const				判断字符是否为非文本字符
bool isNull() const						判断字符编码是否为 0x0000,也就是“\0”
bool isNumber() const					判断字符是否为一个数,表示数的字符不仅包括数字0~9,还包括数字符号①、②等
bool isPrint() const					判断字符是否为可打印字符
bool isPunct() const					判断字符是否为标点符号
bool isSpace() const					判断字符是否为分隔符号,分隔符号包括空格、制表符
bool isSymbol() const					判断字符是否为符号,如特殊符号★、▲
char toLatin1() const					返回与 QChar 字符等效的 Latinl 宇符,如果无等效字符则返回0
QChar toLower() const					返回字符的小写形式字符,如果字符不是宇母,则返回其本身
QChar toUpper() const					返回字符的大写形式字符,如果字符不是宇母,则返回其本身
ushort unicode() const					返回ushort的Unicode编码数值

3 QChar与Latin1字符转换

QChar 的函数 toLatin1()用于将 QChar 字符转换为 Latin1 字符,也就是将 UTF-16编码的字符转换为1 字节 Latin1 编码的宇符。只有当 QChar 宇符的编码为 0~255 时,函数 toLatin1()的转换才有意义。
QChar 还有一个静态函数 QChar::fromLatin1(),它用于将 Latin1 字符转换为 QChar 宇符,其函数原型定义如下:

QChar QChar:: fromLatin1(char c)

QChar 有一个构造函数与这个静态函数功能相同,这个构造函数定义如下:

QChar:: QChar (char ch)

例如,运行下面的一段代码后,字符串 str 的内容会由“Dimple” 变成 “Pimple”。

QString str= "Dimple";					
QChar chP= OChar::fromLatin1('P');		//使用静态函数
//QChar chP= QChar ( 'P' ) ;			//使用构造函数
str [0] = chP;							//替换了str中的第一个字符

4 QChar字符Unicode的编码

QChar 字符是 UTF-16编码的字符, QChar 的接口函数unicode()用于返回字符的 UTF-16编码,也就是ushort类型的数。 我们可以通过这个函数获取任何一个字符的 UTF-16 编码,例如一个汉字的 UTF-16 编码。

也可以通过 char16_t 类型的编码构造 QChar 字符,静态函数 QChar::fromUcs2()
可以实现这样的功能,其函数原型定义如下:

QChar QChar::fromUcs2 (char16_t c)

QChar 有一个构造函数与这个静态函数功能相同,这个构造函数定义如下:

QChar:: QChar (char16_t ch)

5 QChar的逻辑运算符

QChar 类还定义了逻辑运算符,用于两个 QChar对象的比较。两个QChar 对象的逻辑比较就是两个 QChar 字符的 UTF-16编码大小的比较

相关文章:

Qt QString与QChar总结

(一) QString 1 QString的简介 QString 是Qt 中的一个类,用于存储字符串,QString 没有父类。QString 存储的是一串字符,每个字符是一个 QChar 类型的数据。QChar 使用的是 UTF-16 编码,一个字符包含 2字节数据。 对于超过 6553…...

Leetcode算法系列| 1. 两数之和(四种解法)

目录 1.题目2.题解解法一:暴力枚举解法二:哈希表解法解法三:双指针(有序状态)解法四:二分查找(有序状态) 1.题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…...

汇编-pop出栈指令

32位汇编 执行动作分为两步: 第一步:读出数据 第二步:改变栈地址 如果操作数是16位, 则ESP加2; 如果操作数是32位, 则ESP加4 espesp2 或 espesp4 格式:...

【代码】基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型(完美复现)matlab代码

程序名称:基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型 实现平台:matlab 代码简介:提出了变分模态分解(VMD)和麻雀搜索算法(SSA)与长短期记忆神经网络 (LSTM)相耦合,…...

【UnLua】在 Lua 中定义 UE 反射类型

【UnLua】在 Lua 中定义 UE 反射类型 用法 启动编辑器时遍历 Defines 目录下 lua 脚本来加载 UE 反射类型(开个临时的 Lua VM 即可)直接像 -- define a uenum in lua UEnum.EEnumGuestSomethingElse {Value1 1;Value2 2; }-- use it like a native …...

react的开发中关于图片的知识

React是一个流行的JavaScript库,用于构建用户界面。在React开发中,图片是一个非常重要的元素,可以用于美化界面和展示内容。本篇博客将详细讲解React中关于图片的知识。 1. React中使用图片 在React中使用图片非常简单,只需要使…...

AcWing 188:武士风度的牛 ← BFS

【题目来源】https://www.acwing.com/problem/content/190/ 【题目描述】 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。 这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法&…...

马养殖场建设VR模拟实训教学平台具有灵活性和复用性

为保障养殖场生物安全,避免疫病传播,学生出入养殖场受时间和地域的限制, 生产实习多以参观为主,通过畜牧企业技术人员的讲解,学生被动了解生产过程。为了解决畜牧养殖实训难的问题,借助VR技术开展畜牧养殖虚…...

云原生技术演进之路-(云技术如何一步步演进的,云原生解决了什么问题?)

云技术如何一步步演进的? 云原生解决了什么问题? 物理设备 电脑刚被发明的时候,还没有网络,每个电脑(PC),就是一个单机。 这台单机,包括CPU、内存、硬盘、显卡等硬件。用户在单机…...

基于OGG实现Oracle实时同步MySQL

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

如何搭建zerotier服务器组网实现内网穿透

小白花了四天的下班时间终于把zerotier网络调通,此刻坐在桌前舒畅地喝口茶~~ 下面来详细记录下这几天踩的坑: 起因就在于一直在iPad上用向日葵连接公司电脑的我觉得向日葵的界面用的实在难受,vs code操作十分不灵光&…...

【C++】构造函数和析构函数第四部分(深拷贝和浅拷贝)--- 2023.11.25

目录 什么是浅拷贝?浅拷贝的问题使用深拷贝解决浅拷贝问题结束语 什么是浅拷贝? 如果在一个类中没有人为定义拷贝函数,则系统会提供默认拷贝函数。那么在此默认拷贝函数中主要进行了简单的赋值操作,那这个简单的赋值操作我们一般…...

加速软件开发:自动化测试在持续集成中的重要作用!

持续集成的自动化测试 如今互联网软件的开发、测试和发布,已经形成了一套非常标准的流程,最重要的组成部分就是持续集成(Continuous integration,简称CI,目前主要的持续集成系统是Jenkins)。 那么什么是持…...

工具及方法 - 查找排名:国内网络作家排名

中国十大网络小说作家排名,在买购网的排名: 中国十大网络小说作家 网络小说作家排行榜 中国著名网络写手排名→MAIGOO生活榜 (这个网站里还有很多其他的排名。) 1,唐家三少 2,辰东 3,我吃西红…...

MySQL INSERT插入条件判断:如果不存在则插入

MySQL INSERT插入条件判断:如果不存在则插入(转) 我们经常需要进行sql的批量插入,要求:该条记录不存在则插入,存在则不插入。如果使用一条INSERT语句实现呢? ####普通的 INSERT INTO 插入&…...

CSM32RV003:国产高精度16位ADC低功耗RISC-V内核MCU

目录 高精度ADC工业应用工业数据采集应用CSM32RV003简介主要特性 高精度ADC工业应用 高精度ADC即高精度模数转换器,是一种能够将输入模拟信号转换为数字信号的芯片,在多种消费电子、工业、医疗和科研领域都有广泛应用。高精度ADC的主要特点是能够提供高…...

65道常问前端面试题总结react

面试题总结 一.Axios的实现原理 Axios 是一个基于 Promise 的 HTTP 客户端库,用于浏览器和 Node.js 环境。它可以发送 HTTP 请求并处理响应数据。下面是 Axios 实现的基本原理: 封装请求:Axios 提供了一个简单易用的 API,使得开…...

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…...

PyCharm 配置sqlite3驱动下载问题

单击View -> Tool Windows -> Database&#xff0c;打开Database窗体&#xff0c;之后进行配置&#xff0c;下载驱动包失败&#xff01; 解决 &#xff08;1&#xff09;下载Sqlite3驱动 下载地址: Central Repository: org/xerial/sqlite-jdbc 选择的版本是3.34.0,下载…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...