QString 是 Qt 编程中常用的类,除了用作数字量的输入输出之外,QString 还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能。
QString 存储字符串釆用的是 Unicode 码,每一个字符是一个 16 位的 QChar,而不是 8 位的 char,所以 QString 处理中文字符没有问题,而且一个汉字算作是一个字符。
字符串赋值相关函数
asprintf从格式字符串cformat和任意参数列表安全地构建格式化字符串
QString | asprintf(const char *cformat, ...) |
Qt还提供了另一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型。
此外,一些重载具有额外的参数对字段的宽度、数字基数或者浮点精度进行控制。
QString | arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(qulonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(long a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(ulong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(uint a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(short a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(ushort a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(double a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(char a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(QChar a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(qlonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(QStringView a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(QLatin1String a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const |
QString | arg(const QString &a1, const QString &a2) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5, const QString &a6) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5, const QString &a6, const QString &a7) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5, const QString &a6, const QString &a7, const QString &a8) const |
QString | arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5, const QString &a6, const QString &a7, const QString &a8, const QString &a9) const |
说明
- 使用arg(str1, str2, str3)这种方法进行替换。
- 使用arg(str1).arg(str2).arg(str3)这种方法进行替换。
- 使用arg(int, int, int)这种方式进行替换。
示例
//Example 1 ___sprintf QString str; str.sprintf("%s","Welcome "); //str = "Welcome " str.sprintf("%s"," to you! "); //str = " to you! " str.sprintf("%s %s","Welcome "," to you! "); //str = "Welcome to you! "; //Example 1 ___arg QString str; str = "%1 %2"; str.arg("%1f", "Hello"); // returns "%1f Hello" str.arg("%1f").arg("Hello"); // returns "Hellof %2" //Example 2 ___arg //在使用多个arg( )连接时,一定要注意,前面连接使用的arg( )里如果有“%+数字”的情况,后面的arg( )会同样替换! str = QString("%1 %2").arg("%1World", "Hello"); qDebug()<<str; //输出为:"%1World Hello" str = QString("%1 %2").arg("%1World").arg("Hello"); qDebug()<<str; //输出为:"HelloWorld %2" //第一个arg执行完后变为:QString("%1World %2").arg("Hello") //再次执行后"Hello"替换的为%1 //Example 3 ___arg str = QString("十进制 63 的十进制为 %1") .arg(63, 0, 10); //输出:"十进制 63 的十进制为 63" str = QString("十进制 63 的十六进制为 %1") .arg(63, 0, 16); //输出:"十进制 63 的十六进制为 3f" str = QString("%1 %L2 %L3") .arg(12345) .arg(1987654321) //根据结果,可知道这个L的作用 .arg(12345, 0, 8); //但使用这种方式时,L失效 //输出为:12345 1,987,654,321 30071 //这里%L3的L没有任何作用
字符串组合相关函数
“+” 用于组合两个字符串,“+=” 用于将一个字符串追加到另一个字符串的末尾
QString & | operator+=(const QString &other) |
QString & | operator+=(QChar ch) |
QString & | operator+=(const QStringRef &str) |
QString & | operator+=(QLatin1String str) |
QString & | operator+=(const char *str) |
QString & | operator+=(const QByteArray &ba) |
QString & | operator+=(char ch) |
示例
QString str="hello"; str+=" world"; qDebug() <<str; //str=hello world
实现字符串末尾追加另一个字符串
示例
QString str="hello"; str.append("world"); qDebug() <<str; //str=hello world
示例
QString str1="ABC",str2="EFG"; str1.prepend (str) ; qDebug() <<str1; //str1="EFGABC"
trimmed() 去掉字符串首尾的空格,simplified() 不仅去掉首尾的空格,中间连续的空格也用一个空格替换。
(空白字符包括回车符号“\n”、换行符“\r”、制表符"\t"和空格字符:“ ”等)
QString | trimmed() const |
QString | simplified() const |
示例
QString str1=" Are you OK? ", str2; str2=str1.trimmed () ; //str1="Are you OK? " str2=str1.simplified(); //str1="Are you OK?"
用于在给定的索引位置插入字符串str,并返回对该字符串的引用。
QString & | insert(int position, const QString &str) |
QString & | insert(int position, const QChar *unicode, int size) |
QString & | insert(int position, QChar ch) |
QString & | insert(int position, const QStringRef &str) |
QString & | insert(int position, QLatin1String str) |
QString & | insert(int position, const char *str) |
QString & | insert(int position, const QByteArray &str) |
示例
QString str = "white man"; str.insert(6,"strong ");
字符串修改相关函数
删除从位置n开始的m个字符,使用remove(n,m)函数
QString & | remove(int position, int n) |
QString & | remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
QString & | remove(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
QString & | remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
QString & | remove(const QRegExp &rx) |
QString & | remove(const QRegularExpression &re) |
示例
QString str = "white man"; str.remove(6,3);
用字符串替换从索引位置开始的n个字符,并返回对该字符串的引用。
注意:如果指定的位置索引在字符串中,但是position + n超出了字符串范围,那么n将会被调整到在字符串的末尾停止。
QString & replace(int position, int n, const QString &after) QString & replace(int position, int n, const QChar *unicode, int size) QString & replace(int position, int n, QChar after) QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(const QChar *before, int blen, const QChar *after, int alen, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(QChar ch, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(QChar c, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive) QString & replace(const QRegExp &rx, const QString &after) QString & replace(const QRegularExpression &re, const QString &after)
示例
QString x = "Say yes!"; QString y = "no"; x.replace(4, 3, y); // x == "Say no!"
toUpper() 将字符串内的字母全部转换为大写形式,toLower() 将字母全部转换为小写形式
QString toUpper() const QString toLower() const
示例
QString str1="Hello, World", str2; str2=str1.toUpper(); //str1="HELLO,WORLD" str2=str1.toLower(); //str1="hello, world"
QStringList | split(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
QStringList | split(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
QStringList | split(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const |
QStringList | split(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const |
QVector<QStringRef> | splitRef(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
QVector<QStringRef> | splitRef(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
QVector<QStringRef> | splitRef(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const |
QVector<QStringRef> | splitRef(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const |
示例
QByteArray array = tcpSocket->readAll();//从套接字读取数据 QString strr = array;//将数据转换为QString格式 QStringList strlist=strr.split(" ");//将数据以空格拆分,并放入数组中 QStringList list=strlist.at(1).split("#");//将strlist中的第一号元素以“#”隔开并存入list中 qDebug()<<list.at(0);//打印出list中的首个元素
用于初始化字符串或给字符串赋值,将字符串中的每个字符设置为字符ch。如果字符串大小与(默认)不同,那么字符串就会预先调整大小。
QString & | fill(QChar ch, int size = -1) |
示例
QString str = "Berlin"; str.fill('z'); // str == "zzzzzz" str.fill('A', 2); // str == "AA"
字符串查找相关函数
int | count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | count() const |
int | count(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | count(const QRegExp &rx) const |
int | count(const QRegularExpression &re) const |
int | size() const |
int | length() const |
示例
QString str1="NI 好" N=str1.count() //N=3 N=str1.size() //N=3 N=str1.length() //N=3
indexOf() 在字符串中查找参数字符串出现的位置
lastIndexOf() 参数字符串最后出现的位置
其功能是在自身字符串内查找参数字符串 str 出现的位置,参数 from 是幵始查找的位置,Qt::CaseSensitivity cs 参数指定是否区分大小写。
int | indexOf(QLatin1String str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | indexOf(const QStringRef &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | indexOf(QStringView str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | indexOf(const QRegExp &rx, int from = 0) const |
int | indexOf(QRegExp &rx, int from = 0) const |
int | indexOf(const QRegularExpression &re, int from = 0) const |
int | indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const |
int | lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | lastIndexOf(QLatin1String str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | lastIndexOf(const QStringRef &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | lastIndexOf(QStringView str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
int | lastIndexOf(const QRegExp &rx, int from = -1) const |
int | lastIndexOf(QRegExp &rx, int from = -1) const |
int | lastIndexOf(const QRegularExpression &re, int from = -1) const |
int | lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const |
示例
QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1 QString().isNull(); // returns true QString("").isNull(); // returns false QString("abc").isNull(); // returns false
字符串判断相关函数
两个函数都判读字符串是否为空,但是稍有差别。
如果一个空字符串,只有“\0”,isNull() 返回 false,而 isEmpty() 返回 true;只有未赋值的字符串,isNull() 才返回 true。
示例
QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1 QString().isNull(); // returns true QString("").isNull(); // returns false QString("abc").isNull(); // returns false
判断字符串内是否包含某个字符串,可指定是否区分大小写。
bool | contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | contains(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | contains(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | contains(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | contains(const QRegExp &rx) const |
bool | contains(QRegExp &rx) const |
bool | contains(const QRegularExpression &re) const |
bool | contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch) const |
示例
QString str1="G:\Qt5Book\QT5.9Study\qw.cpp"; N=str1.contains (".cpp", Qt::CaseInsensitive) ; // N=true,不区分大小写 N=str1.contains (".CPP", Qt::CaseSensitive) ; // N=false,区分大小写
startsWith() 判断是否以某个字符串幵头,endsWith() 判断是否以某个字符串结束。
bool | endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | endsWith(const QStringRef &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | endsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | endsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | startsWith(const QStringRef &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | startsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
bool | startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const |
示例
QString str1=MG:\Qt5Book\QT5.9Study\qw.cpp"; N=str1.endsWith (".cpp", Qt::CaseInsensitive) ; // N=true,不区分大小写 N=str1.endsWith (".CPP", Qt::CaseSensitive) ; // N=false,区分大小写 N=str1.startsWith ("g: ") ; // N=true,缺省为不区分大小写
字符串提取相关函数
其功能是从字符串中提取以 sep 作为分隔符,从 start 端到 end 端的字符串。
QString QString::section(QChar sep, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const
示例
QString str2, str1="学生姓名,男,1984-3-4,汉族,山东"; str2=str1.section (",",0,0); // str2="学生姓名", 第 1 段的编号为 0 str2=str1.section (",",1,1}; // str2="男" str2=str1.section (",",0,1}; // str2="学生姓名,男" str2=str1.section (",",4,4); // str2="山东"
left 表示从字符串中取左边多少个字符,right 表示从字符串中取右边多少个字符。注意,一个汉字被当作一个字符。
QString | left(int n) const |
QString | leftJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const |
QStringRef | leftRef(int n) const |
QString | right(int n) const |
QString | rightJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const |
QStringRef | rightRef(int n) const |
示例
QString str2, str1="学生姓名,男,1984-3-4,汉族,山东"; N=str1.indexOf (",") ; // N=4,第一个","出现的位置 str2=str1.left (N) ; //str2="学生姓名" N=str1.lastIndexOf (",") ; // N=18,最后一个逗号的位置 str2=str1.right (str1.size()-N-1); //str2=”山东",提取最后一个逗号之后的字符串
返回一个字符串,如果目标字符串包含从指定的位置索引开始的n个字符,则返回指定位置开始的由n个字符组成的字符串;
如果位置索引超过了字符串的长度,则返回空字符串;如果从给定位置开始的字符串中有少于n个字符,或者如果n是-1(默认),函数将返回指定位置可用的所有字符。
示例
QString x = "Nine pineapples"; QString y = x.mid(5, 4); // y == "pine" QString z = x.mid(5); // z == "pineapples"
字符串转换相关函数
//QString转换String string s = qstr.toStdString(); //String转换QString QString qstr2 = QString::fromStdString(s);
QString str; QDateTime time; str = "2018-04-02 13:35:00"; time = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss");
number函数
将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示
QString | number(long n, int base = 10) |
QString | number(int n, int base = 10) |
QString | number(uint n, int base = 10) |
QString | number(ulong n, int base = 10) |
QString | number(qlonglong n, int base = 10) |
QString | number(qulonglong n, int base = 10) |
QString | number(double n, char format = 'g', int precision = 6) |
说明:
第一个参数:待转换数字
第二个参数(整型):转换进制
第二个参数(浮点数):浮点数格式
第三个参数(浮点数):保留小数位数
默认情况下是十进制显示方式转换,也可以使用八进制、十六进制显示方式调用。
示例
/** 整数转换 **/ int a = 20; uint b =255; QString::number(a); QString::number(a,10); QString::number(b); QString::number(b,16); /** 浮点数转换 **/ float a; QString::number(a,‘f’, 2); //保留2位小数 QString::number(a, ‘g’, 2); //保留2位有效数字,以简单方式表示,或者科学计数法表示 //保留指定位数(如001),保留3位,不足在前面补0 QString str=QString::number(a).sprintf("%03d",a);//保留指定位数(如001) QString str=QString("%1").arg(a, 3, 10, QChar('0'));
setNum函数
将字符串设置为打印的值。n在指定的数字,并返回对字符串的引用。
基值默认为10,必须在2到36之间。10以外的基地,n被视为无符号整数。
QString &QString::setNum(int n, int base = 10)
示例
QString str; str.setNum(1234); // str == "1234"
使用的是toInt(), toLongLong(), toDouble()…等等。
int | toInt(bool *ok = nullptr, int base = 10) const |
long | toLong(bool *ok = nullptr, int base = 10) const |
qlonglong | toLongLong(bool *ok = nullptr, int base = 10) const |
short | toShort(bool *ok = nullptr, int base = 10) const |
uint | toUInt(bool *ok = nullptr, int base = 10) const |
ulong | toULong(bool *ok = nullptr, int base = 10) const |
qulonglong | toULongLong(bool *ok = nullptr, int base = 10) const |
ushort | toUShort(bool *ok = nullptr, int base = 10) const |
double | toDouble(bool *ok = nullptr) const |
float | toFloat(bool *ok = nullptr) const |
示例
QString str = "12"; int i = str.toInt(); //If ok is not nullptr, failure is reported by setting *ok to false, and success by setting *ok to true. QString str = "1234.56"; double val = str.toDouble(); // val == 1234.56 //Warning: The QString content may only contain valid numerical characters which includes the plus/minus sign, the character e used in scientific notation, and the decimal point. Including the unit or additional characters leads to a conversion error. bool ok; double d; d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456 d = QString( "1234.56e-02 Volt" ).toDouble(&ok); // ok == false, d == 0 //The string conversion will always happen in the 'C' locale. For locale dependent conversion use QLocale::toDouble() d = QString( "1234,56" ).toDouble(&ok); // ok == false d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56 //For historical reasons, this function does not handle thousands group separators. If you need to convert such numbers, use QLocale::toDouble(). d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false d = QString( "1234567.89" ).toDouble(&ok); // ok == true QString str1 = "1234.56"; str1.toFloat(); // returns 1234.56 bool ok; QString str2 = "R2D2"; str2.toFloat(&ok); // returns 0.0, sets ok to false QString str3 = "1234.56 Volt"; str3.toFloat(&ok); // returns 0.0, sets ok to false
示例
QString = "(1178)" str.toAscii().data();
在 Qt 中,
R
是一个字符串字面量前缀,表示一个“裸字符串”(raw string),也称为“原始字符串”或“非转义字符串”(non-escaped string)。使用R
前缀定义的字符串中,反斜杠字符\
不会被解释为转义字符,因此可以方便地包含一些特殊字符,例如换行符、制表符等等。例如,下面的字符串包含一个制表符和一个换行符:
QString str = R"(Hello\tWorld\n)";
在
R
前缀的引号中,\t
和\n
不会被解释为制表符和换行符,而是被当做普通字符处理。如果不使用R
前缀,你需要将制表符和换行符转义,例如:
QString str = "Hello\\tWorld\\n";
使用
R
前缀可以使字符串的可读性更好,而且可以避免因为转义符号的使用而出现错误。
各版本之间的变化
从 Qt 5 到 Qt 6,QString 类的设计和实现经历了一些变化,主要体现在以下几个方面:
- Unicode 支持的改进:在 Qt 5 中,QString 使用 UCS-2(16 位 Unicode 字符编码)来存储字符。这意味着对 Unicode 编码点的支持不完整,部分编码点(例如辅助平面的字符,如 Emoji)需要两个 QChar 进行表示。在 Qt 6 中,QString 采用了 UTF-16 编码,使其能够更好地处理 Unicode 编码点。这使得在处理国际化文本时更加方便且效率更高。
- 接口修改:为了简化代码和提高效率,QString 的一些接口在 Qt 6 中进行了修改。例如,
QString::isNull()
方法已被弃用,因为在 Qt 6 中,空字符串(QString::isEmpty()
)和 null 字符串是等价的。此外,一些类似的 API 已合并,如QString::append()
等。 - QCharRef 类的移除:在 Qt 5 中,QCharRef 是一个辅助类,用于访问和修改 QString 中的字符。在 Qt 6 中,QCharRef 类被移除,QString 提供了新的方法来实现相同的功能,例如使用
operator[]
访问字符,用replace()
方法修改字符等。 - 更好的与 std::string 交互:Qt 6 改进了与 C++ 标准库中的 std::string 之间的交互。例如,新增了
QString::toStdString()
和QString::fromStdString()
方法,用于在 QString 和 std::string 之间进行转换。这使得在 Qt 和非 Qt 代码之间进行字符串操作更加方便。 - 正则表达式引擎的更改:Qt 5 使用 QRegExp 提供正则表达式支持,但在 Qt 5.14 中引入了 QRegularExpression,该类基于 PCRE2 引擎。在 Qt 6 中,QRegExp 已被完全移除,使用 QRegularExpression 成为处理正则表达式的推荐方法。因此,与 QString 中的正则表达式相关的方法(如
indexOf()
,lastIndexOf()
等)现在也使用 QRegularExpression 作为参数。
这些变化的主要目的是为了简化接口、提高效率和改进 Unicode 支持。在迁移到 Qt 6 时,你可能需要对现有代码进行一些调整以适应这些更改。