QString
是 Qt 框架中用于表示字符串的一个类。它提供了丰富的功能来处理 Unicode 字符串,使得国际化和本地化的应用程序开发更加简单。QString
与标准 C++ 的 std::string
类似,但提供了更多与 Unicode 和国际化相关的功能。
常用功能
判空
代码演示
isNull()
-
用途:
isNull()
函数用于检查对象是否被初始化。对于字符串类(如QString
),一个isNull
的字符串是那个在声明时没有被赋予任何值的字符串。它不同于一个空字符串。 -
返回值: 如果对象没有被初始化,则返回
true
;否则返回false
。 -
isEmpty()
-
用途:
isEmpty()
函数用于检查对象是否为空。对于字符串类,空意味着字符串的长度为 0。注意一个isNull
的字符串也被认为是isEmpty
,但是一个isEmpty
的字符串不一定是isNull
。 -
返回值: 如果对象为空(如字符串长度为 0),则返回
true
;否则返回false
。
拼接
格式化
基本形式
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: 用于填充额外空间的字符。
浮点数格式化
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: 用于填充额外空间的字符。
字符串填充
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()
还有一个重载版本,它接受一个 QRegExp
或 QRegularExpression
对象作为参数,允许你使用正则表达式来进行复杂的搜索。
截断
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)存储的字符串时非常有用,尤其是在处理与系统的交互或旧的数据文件