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流浪猫狗救助管理系统

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

IP多播多播多播

一、简述 1、IP地址 ABCDE类地址 类别网络号第一字节固定值范围A1字节0xxx0~127B2字节10xx128~191C3字节110x192~223D4字节1110224~239E1111 计算机网络——组播地址(多播地址、D类地址)详解 二、多播 1、参数设置 -----IP_ADD_MEMBERSHIP加入多播…

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

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

React面试题

1. 什么是 React? React 是一个用于构建用户界面的 JavaScript 库。它由 Facebook 开发并开源,广泛应用于现代 Web 应用程序的开发中。 2. React 中的组件是什么? 组件是 React 中构建用户界面的基本单位。它们是可重用且自包含的代码块&a…

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

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

flutter 使用高德地图

网址 引入高德地图组件 #地图插件amap_flutter_map: ^3.0.0# 定位插件amap_flutter_location: ^3.0.0 并执行命令 flutter pub get由于高德地图Flutter插件内不包含基础SDK包,所以需要单独引入地图基础SDK,在android文件加下的build.gradle文件中添加…

Spring Boot整合RocketMQ

pom.xml导入RocketMQ依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>application.yml中添加配置 rocketmq:name-ser…

MySQL8 一键部署

#!/bin/bash ### 定义变量 mysql_download_urlhttps://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz mysql_package_namemysql-8.0.33-linux-glibc2.12-x86_64.tar.xz mysql_dec_namemysql-8.0.33-linux-glibc2.12-x86_64 mysql_download_…

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

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

python3 函数

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

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

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

EasyExcel 通过模板 导入、导出、下载模板

EasyExcel 通过模板 导入、导出、下载模板 import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import java.io.…

Linux 系统管理和监控命令---- auditctl 命令

auditctl 是 Linux 审计系统&#xff08;audit system&#xff09;的一部分&#xff0c;它允许管理员配置审计规则&#xff0c;以跟踪和记录系统活动。这些规则可以帮助你监控对特定文件的访问、追踪特定用户的活动或记录系统调用。以下是 auditctl 的一些常用用法及其示例&…

django调用矩阵分解推荐算法模型做推荐系统

在Django中调用推荐算法模型来构建推荐系统&#xff0c;通常需要几个步骤&#xff1a;训练模型、保存模型、在Django中加载模型以及使用模型进行推荐。以下是这个过程的一个简化示例&#xff1a; 步骤 1: 训练推荐算法模型 首先&#xff0c;你需要使用Python的机器学习库&…

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

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

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

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

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

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