【 QString接口大全】 Qt QString类使用示例

简介: 【 QString接口大全】 Qt QString类使用示例


QString Qt 编程中常用的类,除了用作数字量的输入输出之外,QString 还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能。

QString 存储字符串釆用的是 Unicode 码,每一个字符是一个 16 位的 QChar,而不是 8 位的 char,所以 QString 处理中文字符没有问题,而且一个汉字算作是一个字符。


符串赋值相关函数

  • asprintf和arg()(格式化赋值)

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

说明

  1. 使用arg(str1, str2, str3)这种方法进行替换。
  2. 使用arg(str1).arg(str2).arg(str3)这种方法进行替换。
  3. 使用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
  • append(字符串后追加)

实现字符串末尾追加另一个字符串

QString & append(const QString &str)
QString & append(const QChar *str, int len)
QString & append(QChar ch)
QString & append(const QStringRef &reference)
QString & append(QLatin1String str)
QString & append(const char *str)
QString & append(const QByteArray &ba)

示例

   QString str="hello";
   str.append("world");
   qDebug() <<str;    //str=hello world
  • append(字符串前追加)
QString & prepend(const QString &str)
QString & prepend(const QChar *str, int len)
QString & prepend(QChar ch)
QString & prepend(const QStringRef &str)
QString & prepend(QLatin1String str)
QString & prepend(const char *str)
QString & prepend(const QByteArray &ba)

示例

QString str1="ABC",str2="EFG";
 
str1.prepend (str) ;
 
qDebug() <<str1;    //str1="EFGABC"
  • trimmed() 和 simplified()(去空格)

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?"
  • insert()(字符插入)

用于在给定的索引位置插入字符串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 ");

字符串修改相关函数

  • remove(字符删除)

删除从位置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);
  • replace(字符串替换)

用字符串替换从索引位置开始的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()(大小写转换)

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"
  • split(字符串拆分)
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中的首个元素
  • fill函数(批量填充字符)

用于初始化字符串或给字符串赋值,将字符串中的每个字符设置为字符ch。如果字符串大小与(默认)不同,那么字符串就会预先调整大小。

QString & fill(QChar ch, int size = -1)

示例

QString str = "Berlin";
str.fill('z');
// str == "zzzzzz"
 
str.fill('A', 2);
// str == "AA"

字符串查找相关函数

  • count()、size() 和 length()(返回字符串的字符个数)
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 ()(查找子字符串)

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 

字符串判断相关函数

  •  isNull() 和 isEmpty()(判断字符串是否为空)

两个函数都判读字符串是否为空,但是稍有差别。

如果一个空字符串,只有“\0”,isNull() 返回 false,而 isEmpty() 返回 true;只有未赋值的字符串,isNull() 才返回 true。

bool isEmpty() const
bool isNull() 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 
  • contains()(判断包含)

判断字符串内是否包含某个字符串,可指定是否区分大小写。

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,区分大小写
  • endsWith() 和 startsWith()(判断字符串首尾)

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,缺省为不区分大小写

字符串提取相关函数

  • section()(字符串提取)

其功能是从字符串中提取以 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()(字符串提取)

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=”山东",提取最后一个逗号之后的字符串
  • mid()函数()(提取子串)

返回一个字符串,如果目标字符串包含从指定的位置索引开始的n个字符,则返回指定位置开始的由n个字符组成的字符串;

如果位置索引超过了字符串的长度,则返回空字符串;如果从给定位置开始的字符串中有少于n个字符,或者如果n是-1(默认),函数将返回指定位置可用的所有字符。

QString mid(int position, int n = -1) const
QStringRef midRef(int position, int n = -1) const

示例

QString x = "Nine pineapples";
QString y = x.mid(5, 4);            // y == "pine"
QString z = x.mid(5);               // z == "pineapples"

字符串转换相关函数

  • QString与String的相互转换
//QString转换String
 
string s = qstr.toStdString();
 
//String转换QString
 
QString qstr2 = QString::fromStdString(s);
  • QString转为QDateTime
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 转为 const char *
QByteArray toLatin1() const
QByteArray

toLocal8Bit() const

const QChar * constData() const
QChar * data()
const QChar * data() const
const QChar * unicode() const

示例

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 类的设计和实现经历了一些变化,主要体现在以下几个方面:

  1. Unicode 支持的改进:在 Qt 5 中,QString 使用 UCS-2(16 位 Unicode 字符编码)来存储字符。这意味着对 Unicode 编码点的支持不完整,部分编码点(例如辅助平面的字符,如 Emoji)需要两个 QChar 进行表示。在 Qt 6 中,QString 采用了 UTF-16 编码,使其能够更好地处理 Unicode 编码点。这使得在处理国际化文本时更加方便且效率更高。
  2. 接口修改:为了简化代码和提高效率,QString 的一些接口在 Qt 6 中进行了修改。例如,QString::isNull() 方法已被弃用,因为在 Qt 6 中,空字符串(QString::isEmpty())和 null 字符串是等价的。此外,一些类似的 API 已合并,如 QString::append() 等。
  3. QCharRef 类的移除:在 Qt 5 中,QCharRef 是一个辅助类,用于访问和修改 QString 中的字符。在 Qt 6 中,QCharRef 类被移除,QString 提供了新的方法来实现相同的功能,例如使用 operator[] 访问字符,用 replace() 方法修改字符等。
  4. 更好的与 std::string 交互:Qt 6 改进了与 C++ 标准库中的 std::string 之间的交互。例如,新增了 QString::toStdString()QString::fromStdString() 方法,用于在 QString 和 std::string 之间进行转换。这使得在 Qt 和非 Qt 代码之间进行字符串操作更加方便。
  5. 正则表达式引擎的更改:Qt 5 使用 QRegExp 提供正则表达式支持,但在 Qt 5.14 中引入了 QRegularExpression,该类基于 PCRE2 引擎。在 Qt 6 中,QRegExp 已被完全移除,使用 QRegularExpression 成为处理正则表达式的推荐方法。因此,与 QString 中的正则表达式相关的方法(如 indexOf()lastIndexOf() 等)现在也使用 QRegularExpression 作为参数。

这些变化的主要目的是为了简化接口、提高效率和改进 Unicode 支持。在迁移到 Qt 6 时,你可能需要对现有代码进行一些调整以适应这些更改。

目录
相关文章
|
3月前
Qt类结构分析
Qt类结构分析
64 3
|
2月前
|
设计模式 前端开发 安全
Qt注册类对象单例与单类型区别
在进行开发时,应当根据具体的应用场景和需求来选择使用单例模式或是单类型。如果是全局服务或状态管理,可能需要单例模式;如果是为了使QML环境下的不同组件能够访问到同一个后端服务对象,则可能需要使用单类型。
40 2
|
3月前
|
编解码 开发框架
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
271 3
|
3月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
279 3
|
3月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
131 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
423 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Dial的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Dial的使用及说明
170 2
|
3月前
|
数据可视化
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Date/Time Edit的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Date/Time Edit的使用及说明
388 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
578 1
|
3月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
157 0
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明