Qt QString常用操作
·
1.字符串追加append();
代码:
(效果和str += "d"; 相同)
QString str = "abc";
str.append("d"); // 将字符串"d"追加到str末尾
效果:

2.格式化字符串sprintf()/arg();
注意:sprintf()Qt6已经移除了,他鼓励用更安全的arg()
(也就是让通过站位字符让输出的形式看着更舒服)
Qt6以前:
代码:
%s - 字符串占位符
◦ %d - 整数占位符
◦ %f - 浮点数占位符
◦ %x - 十六进制整数占位符
QString str;
str.sprintf("%s %d", "abc", 123); // 格式化输出字符串
// 结果: "abc 123"
由于我安装的是Qt6所以没法给运行结果。
Qt6:
代码
QString str;
str = QString("姓名: %1, 年龄: %2, 分数: %3").arg("张三").arg(20).arg(95.5);
// 结果: "姓名: 张三, 年龄: 20, 分数: 95.5"
运行结果:
![]()
3.查询子串
3.1.startsWith()-从串首开始查询
注意:这个可以传入两个参数后面的那个Qt::CaseSensitive表示区分大小写;Qt::CaseInsensitive表示不区分大小写。如果不写后面那个参数,默认大小写敏感。
代码:
QString str = "abc";
bool result1 = str.startsWith("a", Qt::CaseSensitive); // 区分大小写,返回 true
bool result2 = str.startsWith("A", Qt::CaseSensitive); // 区分大小写,返回 false
bool result3 = str.startsWith("A", Qt::CaseInsensitive); // 不区分大小写,返回 true
结果:

3.2.endsWith() - 检查字符串结尾
代码:
QString str = "abc.txt";
bool result1 = str.endsWith(".txt", Qt::CaseSensitive); // 返回 true
bool result2 = str.endsWith(".TXT", Qt::CaseSensitive); // 返回 false
bool result3 = str.endsWith(".TXT", Qt::CaseInsensitive); // 返回 true
结果:

3.3.contains() - 检查是否包含子串(从前向后)
代码:
contains() - 检查是否包含子串QString str = "Hello World";
bool result1 = str.contains("world", Qt::CaseSensitive); // 返回 false
bool result2 = str.contains("world", Qt::CaseInsensitive); // 返回 true
bool result3 = str.contains("llo", Qt::CaseSensitive); // 返回 true
结果:

3.4.indexOf() - 查找子串位置
代码:
QString str = "Hello World";
int pos1 = str.indexOf("World", 0, Qt::CaseSensitive); // 返回 6
int pos2 = str.indexOf("world", 0, Qt::CaseSensitive); // 返回 -1(未找到)
int pos3 = str.indexOf("o", 0, Qt::CaseSensitive); // 返回 4(第一个'o'的位置)
结果:

3.5lastIndexOf() - 从后向前查找子串位置
代码:
QString str = "Hello World";
int pos1 = str.lastIndexOf("o", -1, Qt::CaseSensitive); // 返回 7(最后一个'o'的位置)
int pos2 = str.lastIndexOf("l", -1, Qt::CaseSensitive); // 返回 9(最后一个'l'的位置)
结果:

4.字符串比较
4.1compare() - 比较两个字符串
代码:
QString str1 = "apple";
QString str2 = "Apple";
int result1 = QString::compare(str1, str2, Qt::CaseSensitive); // 返回正数(区分大小写)
int result2 = QString::compare(str1, str2, Qt::CaseInsensitive); // 返回 0(不区分大小写)
// 也可以使用成员函数形式
int result3 = str1.compare(str2, Qt::CaseSensitive); // 返回正数
结果:

4.2.QCollator类-基于区域感知比较
这个大家平时可能不常用这里解释一下区域感知:区域感知是一种根据特定语言和文化规则进行字符串比较的方法,它确保了排序结果符合用户的期望和文化习惯。
(也就是你自己通过QCollator定义比较方式)
下面以最常用的文件排序为例
代码:头文件:
#include <QCollator> #include <QStringList>//这个是字符串组
QStringList items = {"file10.txt", "file2.txt", "file1.txt", "file20.txt"};
QCollator collator;
collator.setNumericMode(true); // 启用数字模式
std::sort(items.begin(), items.end(), collator);
qDebug() << "数字模式排序:" << items;
结果:

5.将字符串转换为想要的数据类型
5.1.toInt() - 转换为整数
代码:
QString str="25";
int num=str.toInt();
qDebug()<<num;
结果:

这里还可以传入一个bool类型的参数来验证抓换是否成功:
代码:
QString str="25";
bool ok;
int num=str.toInt(&ok);
if(ok)
{
qDebug()<<num<<"转换成功";
}
else
{
qDebug()<<"转换失败";
}
结果:
![]()
5.2.大小写转换
代码:
QString str = "Hello World! 123 ABC";
QString lowerStr = str.toLower();
qDebug() << "原始字符串:" << str;
qDebug() << "转换为小写:" << lowerStr;
结果:

toUpper() - 转换为大写语法一样
5.3其他类型
toDouble() - 转换为双精度浮点数
toLong() - 转换为长整数
toFloat() - 转换为单精度浮点数
toShort() - 转换为短整数
toULongLong() - 转换为无符号长长整数
toUtf8()-转换为utf-8编码 QByteArray bytes = str.toUtf8();
语法都一样这里不再赘述。
5.3进阶
5.3.1使用默认值和错误处理
代码::
QString str = "invalid";
bool ok;
// 使用默认值处理转换失败
int value = str.toInt(&ok);
if (!ok) {
value = 0; // 设置默认值
qDebug() << "转换失败,使用默认值0";
}
结果:

5.3.2 批量转换字符串列表
代码:
QStringList numberStrings = {"1", "2", "3", "4", "5"};
QList<int> numbers;
bool allOk = true;
for (const QString &str : numberStrings) {
bool ok;
int value = str.toInt(&ok);
if (ok) {
numbers.append(value);
} else {
allOk = false;
qDebug() << "转换失败:" << str;
}
}
for( int i=0;i<numbers.size();i++)
{
qDebug()<<" "<<numbers[i];
}
结果:

更多推荐


所有评论(0)