QString的处理及中文乱码问题

QString 是 Qt 框架中用于表示字符串的一个类。它提供了丰富的功能来处理 Unicode 字符串,使得国际化和本地化的应用程序开发更加简单。QString 与标准 C++ 的 std::string 类似,但提供了更多与 Unicode 和国际化相关的功能。

常用功能

判空

代码演示

isNull()

  • 用途: isNull() 函数用于检查对象是否被初始化。对于字符串类(如 QString),一个 isNull 的字符串是那个在声明时没有被赋予任何值的字符串。它不同于一个空字符串。

  • 返回值: 如果对象没有被初始化,则返回 true;否则返回 false

  • isEmpty()

  • 用途: isEmpty() 函数用于检查对象是否为空。对于字符串类,空意味着字符串的长度为 0。注意一个 isNull 的字符串也被认为是 isEmpty,但是一个 isEmpty 的字符串不一定是 isNull

  • 返回值: 如果对象为空(如字符串长度为 0),则返回 true;否则返回 false

拼接

格式化

基本形式

  1. QString::arg(const QString &a, ...)
    • a: 要替换的字符串或数字   
  • 数字格式化
  • QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = ' ')
    • a: 要替换的整数。
    • fieldWidth: 数字的总显示宽度。如果 a 的长度小于这个宽度,结果会用 fillChar 填充。
    • base: 数字的基数(例如,10 表示十进制,16 表示十六进制)。
    • fillChar: 用于填充额外空间的字符。

浮点数格式化

  1. QString::arg(double a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = ' ')
    • a: 要替换的浮点数。
    • fieldWidth: 数字的总显示宽度。
    • format: 数字的格式('e''E''f''g''G')。这决定了数字是使用指数形式还是固定小数点形式等。
    • precision: 数字的精度,即小数点后的位数。
    • fillChar: 用于填充额外空间的字符。

字符串填充

  1. QString::arg(const QString &a, int fieldWidth, QChar fillChar)
    • a: 要替换的字符串。
    • fieldWidth: 字符串的总显示宽度。
    • fillChar: 用于填充额外空间的字符。

整形可以转换成浮点型 但是浮点型字符串不能转换成整型

查找

基本用法

indexOf() 函数的最基本用法是查找一个子字符串在 QString 中的第一次出现的位置。如果找到了子字符串,它返回子字符串的第一个字符的索引;如果没有找到,则返回 -1。

带起始位置的搜索

你还可以指定搜索的起始位置。这对于在字符串中多次查找相同的子字符串很有用

QString str = "Hello, world! Hello, Qt!";
int index = str.indexOf("Hello", 5); // 从索引 5 开始搜索,返回 14

区分大小写

默认情况下,indexOf() 在搜索时是区分大小写的。但是,你可以通过传递一个额外的参数来改变这个行为,使搜索变得不区分大小写。

QString str = "Hello, World!";
int index = str.indexOf("world", 0, Qt::CaseInsensitive); // 返回 7

使用正则表达式

indexOf() 还有一个重载版本,它接受一个 QRegExpQRegularExpression 对象作为参数,允许你使用正则表达式来进行复杂的搜索。

截断

chop(int n) 方法从字符串的末尾移除最后 n 个字符。这个操作是在原字符串上进行的,意味着它会改变原始的 QString 对象。

  • 如果 n 的值大于字符串的长度,那么整个字符串会被清空。
  • chop() 方法不返回新字符串,而是直接修改原字符串。
  • 这个方法不会对字符串的内存分配产生影响。即使你移除了很多字符,原始字符串所占用的内存大小不会减少。

QString 类的 right 函数用于从字符串的末尾提取一个子字符串。这个函数很有用,特别是当你需要获取字符串右侧的一定数量的字符时。

代码演示

替换

replace() 方法是 Qt 中用于替换字符串中的字符或子字符串的强大工具。这个方法提供了多种重载形式,允许你用不同的方式来替换字符串中的内容,包括使用简单的字符替换、子字符串替换,甚至使用正则表达式进行复杂的模式匹配和替换。

切割

QStringList QString::split(const QString &separator, Qt::SplitBehavior splitBehavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
  • separator:用作分隔符的字符串。
  • splitBehavior:指定如何处理空字符串。Qt::KeepEmptyParts 会保留空的子字符串,而 Qt::SkipEmptyParts 会在结果中省略它们。
  • cs:指定分隔符的大小写敏感性。

正则表达式

在正则表达式中,中括号 [] 用来定义一个字符集合,称为“字符类”。当您将字符放在中括号内时,这意味着正则表达式将匹配该集合中的任意单个字符。

中文乱码问题

当你在代码中使用中文字符串时,可能会遇到乱码问题。这通常是因为字符串在编码、编译或运行时没有正确处理。使用 QStringLiteral 可以确保字符串字面量在编译时被正确处理为 UTF-16 编码,这是 QString 内部使用的格式。

VS中正常移植到qtcreator乱码的原因

qtcreator源码本身就是utf-8格式

vs默认是GBK

#pragma execution_character_set 是一个编译器特定的预处理指令,主要用于指定源代码文件中字符串字面量的编码。这个指令主要在 Visual Studio 和一些基于 Microsoft 编译器的环境中使用。

当你的源代码中包含非ASCII字符,如中文、日文或其他多字节字符集时,这个指令可以确保编译器正确地理解和编码这些字符。通常,源代码文件是以特定的编码(如 UTF-8、GBK 等)保存的,但编译器默认可能不识别这种编码。使用 #pragma execution_character_set 可以指定编译器在编译代码时应使用的字符集编码。

QString::fromLocal8Bit 是 Qt 框架中的一个函数,用于将本地8位编码的字节字符串转换为 QString。这个函数在处理那些以系统本地编码(而非UTF-8)存储的字符串时非常有用,尤其是在处理与系统的交互或旧的数据文件

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

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

相关文章

计算机网络复习1

概论 文章目录 概论计算机网络的组成功能分类性能指标(搞清楚每个时延的具体定义)分层结构协议、接口和服务服务的分类ISO/OSITCP/IP两者的不同 计算机网络的组成 组成部分:硬件,软件和协议(协议:传输数据…

HPCC:高精度拥塞控制

HPCC:高精度拥塞控制 文章目录 HPCC:高精度拥塞控制摘要1 引言1.1 背景1.2 现有CC的局限性1.3 HPCC的提出 2 研究动机2.1 大型RDMA部署2.2 RDMA目标2.3 当前RDMA CC中的权衡DCQCNTIMELY 2.4 下一代高速CC 3 技术方案3.1 INT3.2 HPCC设计3.3 HPPC的参数 4…

【力扣题解】P404-左叶子之和-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P404-左叶子之和-Java题解🌏题目描述💡题解🌏总结…

计算机毕业设计-----ssm流浪猫狗救助管理系统

项目介绍 流浪猫狗救助管理系统。该项目分为前后台; 前台主要功能包括:会员的注册登陆,流浪猫狗知识,领养中心,团队活动,流浪宠物详情,申请领养等; 后台主要功能包括:管理员的用户…

MySQL 核心模块揭秘 |《发刊词》

1. 为什么要写专栏? 我还在做业务系统研发的时候,有一段时间,系统不稳定,慢 SQL 很多。我们团队花了很长时间持续优化 SQL。 我们有一个表格,从慢查询日志里整理出了很多慢 SQL。其中一些 SQL,按照我们的…

详细讲解Java使用EasyExcel函数来操作Excel表(附实战)

目录 前言1. EasyExcel类2. 原理分析3. demo4. 实战 前言 前阵时间好奇下载Excel,特意学习实战了该功能:详细讲解Java使用HSSFWorkbook函数导出Excel表(附实战) 现在发觉还有个EasyExcel也可专门用来读写Excel表 1. EasyExcel类…

uni-app uni.scss内置全局样式变量

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

python3 函数

Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表):函数体 让我们使用函数来输出"Hello World!": >>> def hello() :print("Hello World!") &…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第三节 栈与堆,值类型与引用类型 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工…

【项目】玩具租赁博客测试报告

目录 一、项目背景 二、项目功能 三、功能测试 一、项目背景 玩具租赁系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有十五个页面构成:用户注册、管理员注册、登录页、用户和管理…

Qt 中使用 MySQL 数据库保姆级教程(下)

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库 1. 在 Qt 中连接 MySQL 数据库&#…

NAS上使用Docker搭建Wiki.js构建云知识库

文章目录 NAS上使用Docker搭建Wiki.js、PostgreSQL和Nginx云知识库前置条件步骤1:获取wikijs的镜像步骤2:配置容器参数2.1 端口设置2.2 挂载设置2.3 环境变量设置(配置数据库) 步骤3. 启动界面3.1 切换语言3.2 GIT 配置3.3 用户和…

【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具

目录 一、K8S的网络类型: 1、K8S中的通信模式: 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内,不同pod之间的通信方式: 1.3、不同node节点上的pod之间是如何通信的呢? 2、网络插件一&#xff…

jQuery: 整理5---删除元素和遍历元素

1. 删除元素 span{color: white;padding: 8px;margin: 5px;float: left;}.green {background-color: green;}.blue {background-color: blue;}<span class"green">green</span><span class"blue">blue</span><span class"…

门控循环单元(GRU)-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、全部代码数据分享&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…

Apache Jackrabbit漏洞浅析

Apache Jackrabbit是一个Java开源内容存储库&#xff0c;1.0.0 < 版本 < 2.20.11、2.21.0 < 版本 < 2.21.18存在RMI功能导致的远程代码执行漏洞。 补丁分析 对比补丁前后两个版本&#xff08;https://github.com/apache/jackrabbit/compare/jackrabbit-2.20.10..…

计算机图形学理论(5):光能传递

局部照明与全局照明 局部照明 只考虑从物体表面到眼睛的直射光。 全局照明 全局照明考虑了直接照明和间接照明&#xff08;根据应用配置可以有多次反射&#xff09;。 全局照明技术 光能传递 光能传递是一种模拟从光源开始的光漫反射传播的方法。这种方法的基础来自于“…

Python-动态柱状图可视化

柱状图 1.基础柱状图1.1通过Bar构建基础柱状图1.2反转x轴&#xff0c;y轴1.3数值标签在右侧1.4总结 2.基础时间柱状图2.1掌握基础的时间线配置动态图表2.2创建时间线2.3自动播放2.4时间线设置主题2.5总结 3.GDP动态柱状图绘制3.1掌握列表的sort方法并配合配合lambda匿名函数完成…

【数据库系统概论】第5章-数据库完整性

文章目录 引言5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4 完整性约束命名子句5.6 触发器 引言 数据库的完整性是指数据的正确性和相容性。 正确性&#xff1a;符合现实语义、反映当前实际情况。性别必须为男或女。 相容性&#xff1a;数据库同一对象在不同关系表中…

115基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)

基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)&#xff0c;程序已调通&#xff0c;可直接运行。 115matlab铣削动力学 (xiaohongshu.com)