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编码大小的比较

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

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

相关文章

5 个 Python 异常值检测算法实战案例

异常值检测(outlier)是一种数据挖掘过程,用于确定数据集中发现的异常值并确定其出现的详细信息。当前自动异常检测至关重要,因为大量数据无法手动标记异常值。自动异常检测具有广泛的应用,例如信用卡欺诈检测,系统健康监测,故障检测以及传感器网络中的事件检测系统等。 …

go atexit源码分析

文章目录 atexit源码解析UML类图样例一: 程序退出之前执行注册函数1.1 流程图1.2 代码分析 样例二:使用cancel取消注册函数2.1 cancel流程图2.2 代码分析 样例三:使用Fatal/Fatalln/Fatal执行注册函数3.1 Fatal/Fatalln/Fatal流程图3.2 代码分析 atexit源…

Android平台GB28181设备接入模块开发填坑指南

技术背景 为什么要开发Android平台GB28181设备接入模块?这个问题不再赘述,在做Android平台GB28181客户端的时候,媒体数据这块,我们已经有了很好的积累,因为在此之前,我们就开发了非常成熟的RTMP推送、轻量…

Scannet v2 数据集介绍以及子集下载展示

Scannet v2 数据集介绍以及子集下载展示 文章目录 Scannet v2 数据集介绍以及子集下载展示参考数据集简介子集scannet_frames_25kscannet_frames_test 下载脚本 download_scannetv2.py 参考 scannet数据集简介和下载-CSDN博客 scannet v2 数据集下载_scannetv2数据集_蓝羽飞鸟的…

kafka学习笔记(一)--脑裂

我知道你想裂,但你先别裂 脑裂 用集群部署的大多数的分布式系统无可避免会面临脑裂问题。简单来说,脑裂就是在同一时刻出现了两个“Leader(或叫Master)”。设想这样一个场景:某分布式系统的分别部署在A,B…

BeanUtil的正确使用方式

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 在实际的开发中,我们常常会用到工具类去拷贝对象的属性,将一个对象的属性转换成另外一个…

球面的表面积

此推导需要用到重积分的知识,另外关于曲面的面积公式可以看我之前的博客

百度AI布局:从财报看百度的核心竞争力和未来发展方向

百度是中国最大的搜索引擎,也是全球领先的人工智能(AI)公司。百度在2023年第三季度业绩中,展示了其在AI领域的强劲表现和广阔前景。 百度财报透露了关于AI业务的哪些重要信息? 百度在2023年第三季度的财报中&#xf…

机器学习:攻击方法FGSM系列

任务 FGSM I-FGSM MI-FGSM Ensemble Attack 攻击评价指标 准确率越低表明攻击越好 数据 预训练模型 BaseLine 实践

***Linux常用命令及解释

1、查看Linux的版本信息 1.1、uname -a 1.2、cat /etc/issue 1.3、cat /proc/version 1.4、hostnamectl 通过使用hostnamectl命令,可以查询和更改系统主机名,并且还可以查看Linux的发行版和内核版本。 2、删除文件 3、修改目录权限 4、解压文件 5、…

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

目标检测YOLO实战应用案例100讲-基于多光谱图像融合的光伏组件故障 检测(续)

目录 3.4 基于改进RIFT的光伏多光谱图像配准 3.4.1 Harris角特征点检测算法

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式?构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念,可以用不同的方式来实现。…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言,它是一套完整的设计系统,包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述,让开发者设计出更符合目标的软件&#xff0c…

vue3+elementPlus之侧边菜单栏功能

选择默认的颜色&#xff0c;将代码拷贝至<el-aside>模块中 稍微把不需要的修改一下。 <template><div class"common-layout"><el-container><el-header class"homeHeader"><div class"headerTitle">Devops…

vue怎么实现国际化? vue-i18n 插件实现国际化,支持切换不同语言

依赖的文档开始 | Vue I18n 一、安装 npm install vue-i18n 如果在一个模块系统中使用它&#xff0c;你必须通过 Vue.use() 明确地安装 vue-i18n&#xff1a; import Vue from vue import VueI18n from vue-i18nVue.use(VueI18n)二、使用 在 src 下创建 lang 文件夹 1.准…

MYSQL 处理重复数据

文章目录 前言防止表中出现重复数据统计重复数据过滤重复数据删除重复数据在这里插入代码片后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正…

实现【Linux--NTP 时间同步服务搭建】

实现【Linux--NTP 时间同步服务搭建】 &#x1f53b; 前言&#x1f53b; 一、NTP 校时&#x1f530; 1.1 NTP 服务校时与 ntpdate 校时的区别&#x1f530; 1.2 NTP 校时服务搭建&#x1f530; 1.2.1 确认 ntp 的安装&#x1f530; 1.2.2 配置 ntp 服务&#x1f530; 1.2.3 启动…

大数据面试大厂真题【附答案详细解析】

1.Java基础篇&#xff08;阿里、蚂蚁、字节、携程、快手、杭州银行等&#xff09; 问题&#xff1a;HashMap的底层实现原理 答案&#xff1a; 在jdk1.8之前&#xff0c;hashmap由 数组-链表数据结构组成&#xff0c;在jdk1.8之后hashmap由 数组-链表-红黑树数据结构组成&…

openpnp - 给底部相机加防尘罩

文章目录 openpnp - 给底部相机加防尘罩概述笔记END openpnp - 给底部相机加防尘罩 概述 设备标定完, 看着底部相机, 有点担心掉进去东西, 万一从吸嘴掉下去的料(或者清理设备台面时, 不小心掉进去东西)将顶部相机搞短路怎么办. 就想加个防尘罩, 如果有东西掉进去, 可以掉到机…