QString的处理及中文乱码问题

发布时间:2023年12月28日

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)存储的字符串时非常有用,尤其是在处理与系统的交互或旧的数据文件

文章来源:https://blog.csdn.net/b1169909203/article/details/135258846
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。