qstring

QString是Qt库中用于处理文本的类,它可以高效地处理Unicode字符串。QString支持多种构造函数,如从const char *、QByteArray或QChar数组创建。它提供了丰富的操作方法,如append、insert、remove、replace等,还支持正则表达式的查找和替换。在处理字符串时,要注意QString的非零结尾特性,以及其与C风格字符串的区别。QStringList可用于处理字符串列表,提供了split和join等方法。此外,QString提供了一种隐含共享的机制,确保在大部分操作中保持高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有的QString的方法都使用const char *参数,const char *被解释为经典的C风格的以零结尾的ASCII字符串。所以const char *参数为0是合法的。如果const char *不是以零结尾的,结果是不确定的。把经典的C字符串复制到QString的函数将不会复制结尾的0字符。QString的QChar数组(可以通过unicode()返回)通常不以零结尾。如果你需要把QString传递到一个需要C的以零结尾的字符串,请使用latin1()。

QString::null是一个零QString。当排序的时候,空字符串在最前面,然后是非空字符串,然后才是零字符串。我们建议使用if ( !str.isNull() ),而不是if ( !str )来检测非零字符串,关于解释说明也可以参考operator!()。

注意如果你发现你正在混合使用QCString、QString和QByteArray,这将会导致很多不必要的复制并且也许会预示着你正在处理的真实自然数据是不确定的。如果数据是以零结尾的八位数据,请使用QCString;如果它是没有结尾的(也就是包含0)八位数据,请使用QByteArray;如果它是文本,请使用QString。

字符串列表可以使用QStringList类来处理。你可以使用QStringList::split()来把一个字符串分割为一个字符串列表,并且可以使用QStringList::join()把一个字符串列表连接成一个使用随意间隔符的字符串。你也可以使用QStringList::grep()从一个字符串列表中获得包含特定子字符串或者包含匹配特定的regex的字符串列表。

C程序员的注意事项

由于C++的类型系统和QString是隐含共享的事实,QString也许会被看做整型或者其它简单基本类型。例如:

QString boolToString( bool b ) { QString result; if ( b ) result = "True"; else result = "False"; return result; }

变量result是一个分配在栈中的自动变量。当return被调用时,因为我们正在返回值,复制构造函数被调用并且这个字符串的一个复制被返回。(我们要感谢隐含共享,没有实际的复制发生,请看下面。)

在Qt的源代码中,你将会遇到想这样的QString的用法:

QString func( const QString& input ) { QString output = input; // 处理输出 return output; }

从input到output的“复制”几乎和复制指针一样快,因为后面的场景复制是通过增加引用计数器来实现的。QString操作是基于写时复制的,只有在实例发生实际改变时,才会被复制。

如果你想不丢失任何Unicode信息的情况下创建一个QString的深度复制,那么你应该使用QString中用QChar*作为参数的构造函数。例如:

QString a("abcd"); QString b( a.unicode(), b.length() );

另外,使用QString中用const char*参数的构造函数就足够了。例如:

QString a("abcd"); QString b( a.latin1() );

也可以参考QCharQCStringQByteArrayQConstString隐含和明显共享类文本相关类非图形用户界面类


 

成员类型文档

section()。


 

成员函数文档

isNull()。

QChar ch )

构造一个长度为一个字符,内容为给定字符ch的字符串。

QString & s )

构造一个s的隐含共享的复制。这是短时间的,因为引用计数被使用。

QByteArray & ba )

构造一个被解释为经典C字符串的ba的深度复制的字符串。

QChar * unicode, uint length )

构造一个QChar数组中开始length个字符的深度复制的字符串。

如果unicode和length为0,那么一个零字符串被创建。

如果只是unicode为0,字符串为空,但是被分配为length个字符空间——无论如何QString可以自动扩展,但是这也许会在一些情况下提高速度。我们建议根据这个目的使用简单的构造函数和setLength(),因为它的结果是有更多的可读代码。

也可以参考isNull()和setLength()。

深度复制的字符串。

如果str,那么一个零字符串被创建。

这是一个抛出构造函数,但是它是完全安全的:把一个Latin1的const char*转化到QString保存了所有的信息。当你编译你的应用程序时,你可以通过定义QT_NO_CAST_ASCII来关闭这个构造函数。你可以使用setLatin1()、fromLatin1()、fromLocal8Bit()和fromUtf8()来生成QString。或者无论什么适合你的八位数据的编码方式。

也可以参考isNull()。

QString & QString & str )

把str添加到字符串中并且返回结果的引用。

string = "Test"; string.append( "ing" ); // string == "Testing"

等于operator+=()。

实例:dirview/dirview.cpp

QString & operator+=()。

QString & QChar ch )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把字符ch添加到字符串中并且返回结果的引用。

等于operator+=()。

QString QString & a, int fieldwidth = 0 ) const

这个函数将返回使用a来替换最低层出现的%ii为'1'或'2'或……'9')的字符串。

fieldwidth值指定了填充到a中的最小空间。正值将产生右对齐文本,负值将产生左对齐文本。

QString firstName( "Joe" ); QString lastName( "Bloggs" ); QString fullName; fullName = QString( "First name is '%1', last name is '%2'" ) .arg( firstName ) .arg( lastName ); // fullName == First name is 'Joe', last name is 'Bloggs'

警告:如果你是用arg()来构造一个想上面实例中的“真正”的句子,那么这可能导致一些翻译的问题(当你使用tr()函数时)。

如果没有%i模式,一个警告信息(qWarning())被输出并且这个文本被添加到字符串的末尾。这被做为错误恢复的功能并且不应该在正确的代码中出现。

也可以参考QObject::tr()。

QString QString( "Decimal 63 is %1 in hexadecimal" ) .arg( 63, 0, 16 ); // str == "Decimal 63 is 3f in hexadecimal"

QString QString QString QString QString QString QString QChar a, int fieldwidth = 0 ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

QString QString( "'E' format, precision 3, gives %1" ) .arg( d, 0, 'E', 3 ); // ds == "1.234E+001"

const char * latin1()并且返回结果。

实例:network/networkprotocol/nntp.cpp

QChar QChar ch = string.at( 4 ); // ch == 'e'

如果QString不是常量(也就是const QString)或者const&(也就是const QString&),那么at()的非常量重载将被用来替代。

QCharRef QString & s1, const QString & s2 ) [静态]

对s1和s2进行词典比较,如果s1小于、等于或者大于s2,就返回小于、等于或者大于0的整数。

这个比较是专有的基于字符的数字Unicode值并且非常快,但是不是人们所期待的。排序用户界面字符串请考虑使用QString::localeAwareCompare()。

int a = QString::compare( "def", "abc" ); // a > 0 int b = QString::compare( "abc", "def" ); // b < 0 int c = QString::compare(" abc", "abc" ); // c == 0

int QString & s ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

对这个字符串和s进行词典比较,如果它小于、等于或者大于s,就返回小于、等于或者大于0的整数。

void QChar(0x0041)('A')和QChar(0x0308)(Unicode accent diaresis),给定的QChar(0x00c4)(德语的A元音变音)。

QChar QChar的值。

等于at(i)。

也可以参考ref()。

int QChar c, bool cs = TRUE ) const

返回在这个字符串中字符c出现的次数。

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

QString string( "Trolltech and Qt" ); int i = string.contains( 't', FALSE ); // i == 3

实例:fileiconview/qfileiconview.cppmdi/application.cpp

int QString & str, bool cs = TRUE ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回在这个字符串中str出现的次数。

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

这个函数计算重叠的字符串,所以在下面的实例中,“bananas”中有两个“ana”的实例。

QString str( "bananas" ); int i = str.contains( "ana" ); // i == 2

也可以参考findRev()。

int QRegExp & rx ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回在字符串中正则表达式rx出现的次数。

这个函数计算重叠的字符串,所以在下面的实例中,有四个“ana”或者“ama”的实例。

QString str = "banana and panama"; QRegExp rxp = QRegExp( "a[nm]a", TRUE, FALSE ); int i = str.contains( rxp ); // i == 4

也可以参考find()和findRev()。

QString QString & s ) const

如果字符串以s结尾,返回真,否则返回假。

也可以参考startsWith()。

实例:chart/main.cpp

QString & QChar c, int len = -1 )

填充字符串为len个字符的值c,并且返回字符串的引用。

如果len为负数(默认),当前字符串长度被使用。

QString str; str.fill( 'g', 5 ); // string == "ggggg"

int QRegExp & rx, int index = 0 ) const

从位置index开始,找到常量正则表达式rx第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。(对于反向搜索也可以参考findRev()。)

返回rx第一次出现的位置,如果rx没有被找到,返回-1。

QString string( "bananas" ); int i = string.find( QRegExp("an"), 0 ); // i == 1

也可以参考findRev()、replace()和contains()。

实例:network/mail/smtp.cpp

int QChar c, int index = 0, bool cs = TRUE ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从位置index开始,找到字符c第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。(对于反向搜索也可以参考findRev()。)

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

返回c第一次出现的位置,如果c没有被找到,返回-1。

int QString & str, int index = 0, bool cs = TRUE ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从位置index开始,找到字符串str第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。(对于反向搜索也可以参考findRev()。)

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

返回str第一次出现的位置,如果str没有被找到,返回-1。

int find(QString(str), index)。

int findRev(QString(str), index)。

int QChar c, int index = -1, bool cs = TRUE ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从位置index开始并且反向搜索,找到字符c第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。

返回c第一次出现的位置,如果c没有被找到,返回-1。

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

QString string( "bananas" ); int i = string.findRev( 'a' ); // i == 5

int QString & str, int index = -1, bool cs = TRUE ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从位置index开始并且反向搜索,找到字符串str第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。

返回str第一次出现的位置,如果str没有被找到,返回-1。

如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。

QString string("bananas"); int i = string.findRev( "ana" ); // i == 3

int QRegExp & rx, int index = -1 ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从位置index开始并且反向搜索,找到正则表达式rx第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。

返回rx第一次出现的位置,如果rx没有被找到,返回-1。

QString string( "bananas" ); int i = string.findRev( QRegExp("an") ); // i == 3

也可以参考find()。

QString fromLatin1( "123456789", 5 ); // str == "12345"

实例:listbox/listbox.cppnetwork/mail/smtp.cpp

QString fromLocal8Bit( "123456789", 5 ); // str == "12345"

local8Bit被假设使用本地指定的格式编码的。

关于Unicode字符串的编码/解码更多变化请参考QTextCodec

QString fromUtf8( "123456789", 5 ); // str == "12345"

关于Unicode字符串的编码/解码更多变化请参考QTextCodec

实例:fonts/simple-qfont-demo/viewer.cpp

QString & QString & s )

把s插入到字符串的index位置之前。

如果index超过字符串的结尾,字符串被填充空格扩展到index长度并且然后s被添加,返回这个字符串的引用。

QString string( "I like fish" ); str = string.insert( 2, "don't " ); // str == "I don't like fish"

也可以参考remove()和replace()。

实例:themes/themes.cppxform/xform.cpp

QString & QChar * s, uint len )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把s中的字符插入到字符串的index位置之前len次并且返回这个字符串的引用。

QString & QChar c )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把c插入到字符串的index位置之前并且返回这个字符串的引用。

如果index超过字符串的结尾,字符串被填充空格(ASCII码为32)扩展到index长度并且然后s被添加,返回这个字符串的引用。

QString & length() == 0,返回真。因此,零字符串也是空字符串。

QString a( "" ); a.isEmpty(); // 真 a.isNull(); // 假 QString b; b.isEmpty(); // 真 b.isNull(); // 真

也可以参考isNull()和length()。

实例:addressbook/mainwindow.cppchart/chartform.cppchart/chartform_canvas.cppnetwork/networkprotocol/nntp.cppqmag/qmag.cppqwerty/qwerty.cpp

bool unicode() == 0,a.length() == 0 a.isNull(); // 真,因为a.unicode() == 0 a.isEmpty(); // 真

也可以参考isEmpty()和length()。

实例:i18n/main.cppqdir/qdir.cpp

const char * QTextCodec类。

这个函数主要对于使用Unicode的开机时的老程序有用处。

只要源字符串的一个未修改复制存在,这个结果就保持有效。

也可以参考utf8()和local8Bit()。

实例:fileiconview/qfileiconview.cppnetwork/networkprotocol/nntp.cpp

QString left( 4 ); // t == "Pine"

也可以参考right()、mid()和isEmpty()。

实例:themes/themes.cpp

QString QChar fill = ' ', bool truncate = FALSE ) const

返回一个长度为width的,包含这个字符串,并且用fill填补的字符串。

如果truncate为假并且字符串的长度超过width,那么返回的字符串是这个字符串的复制。

如果truncate为真并且字符串的长度超过width,那么这个字符串的复制中超过width长度的任何字符都被移除并且这个复制被返回。

QString s( "apple" ); QString t = s.leftJustify( 8, '.' ); // t == "apple..."

也可以参考rightJustify()。

uint isNull()和isEmpty()。

实例:fileiconview/qfileiconview.cppnetwork/networkprotocol/nntp.cpprot13/rot13.cppthemes/themes.cpp

QCString QTextCodec::codecForLocale()。在Windows上,它是系统定义的编码方式。在Mac OS X上,总是使用utf8作为编码方式。

关于Unicode字符串的编码/解码更多变化请参考QTextCodec

也可以参考QString::fromLocal8Bit()、latin1()和utf8()。

int QString & s1, const QString & s2 ) [静态]

对s1和s2进行比较,如果s1小于、等于或者大于s2,就返回小于、等于或者大于0的整数。

这个比较是基于本地的并且也是基于平台的方式。使用这个函数可以把排好序的字符串列表呈现给用户。

也可以参考QString::compare()和QTextCodec::locale()。

int QString & s ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

对这个字符串和s进行比较。

QString lower(); // str == "trolltech"

也可以参考upper()。

实例:scribble/scribble.cpp

QString mid( 5, 4 ); // t == "pine"

也可以参考left()和right()。

实例:network/mail/smtp.cppqmag/qmag.cppthemes/themes.cpp

QString number( a, 16 ); // str == "3f" QString str = QString::number( a, 16 ).upper(); // str == "3F"

也可以参考setNum()。

实例:action/application.cppapplication/application.cppchart/chartform.cppfonts/simple-qfont-demo/viewer.cppmdi/application.cppsql/overview/extract/main.cpp

QString setNum()。

QString setNum()。

QString setNum()。

QString QString( "'E' format, precision 3, gives %1" ) .arg( d, 0, 'E', 3 ); // ds == "1.234E+001"

也可以参考setNum()。

latin1()。请确定已经看到这里的警告文档。注意对于你希望严格遵守Unicode的新代码,当你编译你的代码时,你可以定义QT_NO_ASCII_CAST宏来隐藏这个函数,这样自动抛出就不会被完成。这样可以添加你可以抓住在operator!()下描述的编程错误的优点。

bool isNull() ) doSomethingWith(name);

QString & QString & str )

把str添加到字符串中并且返回结果的引用。

QString & QChar c )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把字符c添加到字符串中并且返回结果的引用。

QString & QString & QChar c )

设置字符串只包含单个字符c。

QString & QString & s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把s的一个浅度复制赋值给这个字符串并且返回这个字符串的引用。这是非常快的,因为字符串没有被实际复制。

QString & 深度复制赋值给这个字符串并且返回这个字符串的引用。

如果str为0,那么零字符串被创建。

也可以参考isNull()。

QString & QCString & cs )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

把解释为经典C字符串的cs的一个深度复制赋值给这个字符串并且返回这个字符串的引用。

QString & QChar QCharRef QCharRef就可以引用字符串中的有效(零)字符。

QCharRef内部类可以被常量QChar使用,但是如果你对它赋值,你就会改变初始字符串(它将会自动分离,因为QString是写时复制)。如果你试图把结果作为QChar以外的东西使用,你将得到编译错误。

QString & QString & s )

在字符串开始处插入s并且返回这个字符串的引用。

等于insert(0, s)。

QString string = "42"; string.prepend( "The answer is " ); // string == "The answer is 42"

也可以参考insert()。

QString & insert(0, ch)。

也可以参考insert()。

QString & QChar ch )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

在字符串开始处插入ch并且返回这个字符串的引用。

等于insert(0, ch)。

也可以参考insert()。

QChar & QChar的引用,如果需要就是用QChar::null扩展字符串。这个结果引用可以立即被赋值或者使用,但是一旦初始字符串发生了改变,它将会变为无效。

QString string("ABCDEF"); QChar ch = string.ref( 3 ); // ch == 'D'

也可以参考constref()。

QString & remove( 1, 4 ); // string == "Meal"

也可以参考insert()和replace()。

QString & QString & s )

从字符串中的index位置开始使用s替换len个字符,并且返回这个字符串的引用。

如果index超出字符串的长度,就什么也不被删除并且s被添加到字符串结尾。如果 index有效并且index加上len超过字符串的结尾,那么这个字符串将从index开始被截短,并且s被添加到字符串结尾。

QString string( "Say yes!" ); string = string.replace( 4, 3, "NO" ); // string == "Say NO!"

也可以参考insert()和remove()。

实例:listviews/listviews.cppnetwork/networkprotocol/nntp.cppqmag/qmag.cpp

QString & QChar * s, uint slen )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从字符串中的index位置开始使用s中的slen个字符的QChar数据替换len个字符,并且返回这个字符串的引用。

也可以参考insert()和remove()。

QString & QRegExp & rx, const QString & str )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

用str替换字符串中出现的每一个正则表达式rx。返回这个字符串的引用。

QString string = "banana"; string = string.replace( QRegExp("an"), "" ); // string == "ba"

也可以参考find()和findRev()。

QString right( 5 ); // t == "apple"

也可以参考left()、mid()和isEmpty()。

实例:fileiconview/qfileiconview.cpp

QString QChar fill = ' ', bool truncate = FALSE ) const

返回一个长度为width的,包含fill填补的字符串,后面跟着这个字符串。

如果truncate为假并且字符串的长度超过width,那么返回的字符串是这个字符串的复制。

如果truncate为真并且字符串的长度超过width,那么这个字符串的复制中超过width长度的任何字符都被移除并且这个复制被返回。

QString string( "apple" ); QString t = string.rightJustify( 8, '.' ); // t == "...apple"

也可以参考leftJustify()。

QString QChar sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const

这个函数用来返回字符串的一部分。

这个字符串被看作由字符sep分隔开的顺序的区段。返回的从位置start到位置end(两个都包含)的区段组成的字符串。如果end没有被指定,那么从位置start开始到字符串的结尾的所有区段都被返回。区段是从左面是0、1、2等等计数,或者从右面-1、-2等等计数的。

flags参数可以用来影响这个函数行为的特征,例如是否区分大小写,是否忽略空区段并且如何处理开始和结尾的分隔符,请参考SectionFlags

QString csv( "forename,middlename,surname,phone" ); QString s = csv.section( ',', 2, 2 ); // s == "surname" QString path( "/usr/local/bin/myapp" ); // First field is empty QString s = path.section( '/', 3, 4 ); // s == "bin/myapp" QString s = path.section( '/', 3, 3, SectionSkipEmpty ); // s == "myapp"

如果start或者end为负数,我们就从字符串的右面开始计数,最右面的是-1,接着是-2,依此类推。

QString csv( "forename,middlename,surname,phone" ); QString s = csv.section( ',', -3, -2 ); // s == "middlename,surname" QString path( "/usr/local/bin/myapp" ); // First field is empty QString s = path.section( '/', -1 ); // s == "myapp"

也可以参考QStringList::split()。

实例:chart/element.cpp

QString QString QString QString & sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

这个函数用来返回字符串的一部分。

这个字符串被看作由字符串sep分隔开的顺序的区段。返回的从位置start到位置end(两个都包含)的区段组成的字符串。如果end没有被指定,那么从位置start开始到字符串的结尾的所有区段都被返回。区段是从左面是0、1、2等等计数,或者从右面-1、-2等等计数的。

flags参数可以用来影响这个函数行为的特征,例如是否区分大小写,是否忽略空区段并且如何处理开始和结尾的分隔符,请参考SectionFlags

QString data( "forename**middlename**surname**phone" ); QString s = data.section( "**", 2, 2 ); // s == "surname"

如果start或者end为负数,我们就从字符串的右面开始计数,最右面的是-1,接着是-2,依此类推。

QString data( "forename**middlename**surname**phone" ); QString s = data.section( "**", -3, -2 ); // s == "middlename**surname"

也可以参考QStringList::split()。

QString QRegExp & reg, int start, int end = 0xffffffff, int flags = SectionDefault ) const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

这个函数用来返回字符串的一部分。

这个字符串被看作由正则表达式reg分隔开的顺序的区段。返回的从位置start到位置end(两个都包含)的区段组成的字符串。如果end没有被指定,那么从位置start开始到字符串的结尾的所有区段都被返回。区段是从左面是0、1、2等等计数,或者从右面-1、-2等等计数的。

flags参数可以用来影响这个函数行为的特征,例如是否区分大小写,是否忽略空区段并且如何处理开始和结尾的分隔符,请参考SectionFlags

QString line( "forename/tmiddlename surname /t /t phone" ); QRegExp sep( "/s+" ); QString s = line.section( sep, 2, 2 ); // s == "surname"

如果start或者end为负数,我们就从字符串的右面开始计数,最右面的是-1,接着是-2,依此类推。

QString line( "forename/tmiddlename surname /t /t phone" ); QRegExp sep( "//s+" ); QString s = line.section( sep, -3, -2 ); // s == "middlename surname"

警告: QRegExp这一部分比其它字符串和字符的重载版本要花费更多。

也可以参考QStringList::split()和simplifyWhiteSpace()。

void QChar c )

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

设置在index位置的字符为c并且如果需要使用空格来扩展这个字符串。

这个方法在Qt 3.x中是多余的,因为operator[]可以在需要的时候扩展字符串。

QString & isNull()和isEmpty()。

void setLength( newLen ) // 分配一些空间 while ( ... ) { result[resultLength++] = ... // 填充(部分的)空格作为数据 } result.truncate[resultLength]; // 并且去掉不确定的垃圾

如果newLen是不足的话,最坏的情况就是将会循环将会变慢。

也可以参考truncate()、isNull()、isEmpty()和length()。

QString & setNum( 1234 ); // string == "1234"

QString & QString & QString & QString & QString & QString & arg()。

QString & arg()。

QString & QChar * unicode, uint len )

重新定义字符串的大小为len并且把unicode复制到字符串中。如果unicode为零,什么都不被复制,但是字符串还是被重新定义为len。如果len为0,那么字符串变为字符串。

也可以参考setLatin1()和isNull()。

QString & 字符串。

也可以参考setLatin1()和isNull()。

QString QChar::isSpace()返回真的字符。这里面包括十进制为9(TAB)、10(LF)、11(VT)、12(FF)、13(CR)和32(Space)的UNICODE字符。

QString string = " lots/t of/nwhite space "; QString t = string.simplifyWhiteSpace(); // t == "lots of white space"

也可以参考stripWhiteSpace()。

QString & utf8()编码字符串。格式化字符串cformat希望是一个Latin1的。如果你需要一个Unicode格式字符串,使用arg()来替代。为了完全支持Unicode的类型安全的字符串构建,你可以像这样使用QTextOStream

QString str; QString s = ...; int x = ...; QTextOStream( &str ) << s << " : " << x;

对于翻译,特别是如果字符串包含超过一个的转义序列,你应该考虑使用arg()来替代它。这将允许翻译者来控制替换的顺序并且支持Unicode。

也可以参考arg()。

实例:dclock/dclock.cppforever/forever.cpplayout/layout.cppqmag/qmag.cppscrollview/scrollview.cpptooltip/tooltip.cppxform/xform.cpp

bool QString & s ) const

如果字符串以s开始,返回真,否则返回假。

QString string("Bananas"); bool a = string.startsWith("Ban"); // a == TRUE

也可以参考endsWith()。

QString QChar::isSpace()返回真的字符。这里面包括十进制为9(TAB)、10(LF)、11(VT)、12(FF)、13(CR)和32(Space)的UNICODE字符。

QString string = " white space "; QString s = string.stripWhiteSpace(); // s == "white space"

也可以参考simplifyWhiteSpace()。

double toDouble(); // a == 1234.56

也可以参考number()。

float number()。

int toInt( &ok, 16 ); // hex == 255, ok == TRUE int dec = str.toInt( &ok, 10 ); // dec == 0, ok == FALSE

也可以参考number()。

long number()。

short number()。

ulong number()。

ushort truncate( 5 ); // s == "trunc"

也可以参考setLength()。

实例:network/mail/smtp.cpp

const QChar * QString upper(); // t == "TEXT"

也可以参考lower()。

实例:scribble/scribble.cppsql/overview/custom1/main.cpp

QCString QTextCodec

也可以参考QString::fromUtf8()、local8Bit()和latin1()。


 

相关函数

bool QString & s1, const QString & s2 )

如果s1在词典中不等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

bool QString & s1, const char * s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中不等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中不等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

const QString QString & s1, const QString & s2 )

返回字符串s1和字符串s2连接的结果的字符串。

等于s1.append(s2)。

const QString QString & s1, const char * s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回字符串s1和字符串s2连接的结果的字符串。

等于s1.append(s2)。

const QString QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回字符串s1和字符串s2连接的结果的字符串。

const QString QString & s, char c )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回字符串s和字符c连接的结果的字符串。

等于s.append(c)。

const QString QString & s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回字符c和字符串s连接的结果的字符串。

等于s.prepend(c)。

bool QString & s1, const char * s2 )

如果s1在词典中小于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) < 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中小于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) < 0。

QDataStream & QDataStream & s, const QString & str )

把字符串str写到流s中。

也可以参考QDataStream操作符的格式

bool QString & s1, const char * s2 )

如果s1在词典中小于或等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1,s2) <= 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中小于或等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1,s2) <= 0。

bool QString & s1, const QString & s2 )

如果s1在词典中等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

bool QString & s1, const char * s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) != 0。

bool QString & s1, const char * s2 )

如果s1在词典中大于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) > 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中大于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) > 0。

bool QString & s1, const char * s2 )

如果s1在词典中大于或等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) >= 0。

bool QString & s2 )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果s1在词典中大于或等于s2,返回真,否则如果不是,返回假。这个比较是区分大小写的。注意一个零字符串不等于一个非零的空字符串。

等于compare(s1, s2) >= 0。

QDataStream & QDataStream & s, QString & str )

从流s中读取一个字符串到字符串str中。

也可以参考QDataStream操作符的格式

03-19
<think>好的,用户问的是关于QString的介绍。我需要先回忆QString的基本信息,它是Qt框架中的一个类,用于处理字符串,特别是Unicode字符串。用户可能想了解它的用途、特点、常见操作以及使用示例。 首先,我应该确定用户的使用场景。可能是刚接触Qt开发的程序员,或者是在处理字符串时遇到问题需要了解QString的优势。用户没有提到具体问题,所以需要全面但简洁的介绍,包括基本概念、主要功能和常见用法。 接下来,需要组织回答结构。按照逻辑顺序,先介绍QString是什么,然后说明它的特点,比如Unicode支持、隐式共享、方法丰富等。接着可以对比C++标准字符串,突出QString的优势。然后给出一些代码示例,展示常见操作,如初始化、拼接、转换、替换等。最后可能提到注意事项,比如内存管理和编码问题。 要确保内容准确,比如隐式共享(copy-on-write)机制需要正确描述。另外,代码示例要简单明了,符合中文注释的习惯。同时,注意用户可能关心与标准库的对比,比如为什么Qt要自己实现字符串类,这里需要提到对Unicode的支持和API设计更符合Qt生态的需求。 还要检查是否有用户不可见的要求,比如数学公式的格式,但这个问题不涉及数学内容,所以可能不需要处理。但需要确保回答结构清晰,分点列出,方便阅读。 最后,确认回答使用中文,避免技术术语翻译错误,比如“隐式共享”是正确的术语。可能还需要提醒用户注意QString与std::string的转换,以及多线程环境下的安全性,但根据Qt文档,QString是线程安全的,只要不被多个线程同时修改。 总结回答结构:定义、特点、对比、示例、注意事项。这样用户能逐步了解QString的全貌。</think>QStringQt 框架中用于处理字符串的核心类,以下是结构化介绍: 一、基本定义 $$ QString = Unicode字符串 + Qt特性扩展 $$ 它是Qt对C++标准库`std::string`的增强实现,专门为处理国际化需求和Qt框架优化设计。 二、核心特点 1. **Unicode支持** - 原生支持UTF-16编码(可自动处理代理对) - 示例:`QString s = "你好,世界!";` 2. **隐式共享(Copy-On-Write)** ```cpp QString s1 = "Hello"; QString s2 = s1; // 此时不复制内存 s2[0] = 'X'; // 修改时触发深拷贝 ``` 3. **链式方法调用** ```cpp QString(" TEST ").trimmed().toLower(); // 输出"test" ``` 4. **跨平台一致性** - 统一处理不同操作系统的路径分隔符(`/` vs `\`) - 自动处理行尾符(`\n`, `\r\n`) 三、与std::string对比 | 特性 | QString | std::string | |-----------------|--------------------------|----------------------| | 编码 | UTF-16 | 依赖本地编码 | | 内存管理 | 引用计数+COW | 深拷贝 | | 国际化支持 | 内置大小写转换、排序规则 | 需依赖第三方库 | | 扩展方法 | 200+成员函数 | 基础字符串操作 | 四、典型操作示例 ```cpp // 1. 初始化 QString s1 = "温度:" + QString::number(25.6) + "℃"; // 2. 格式化 QString s2 = QString("坐标:( %1, %2 )").arg(x).arg(y); // 3. 编码转换 std::string stdStr = s1.toStdString(); QString fromUtf8 = QString::fromUtf8(byteArray); // 4. 正则匹配 QStringList matches = s1.match(QRegularExpression("\\d+")); ``` 五、注意事项 1. **内存管理**:虽然QString自动管理内存,但要注意跨DLL边界传递时的内存分配规则 2. **性能优化**:频繁拼接操作建议使用`QStringBuilder`或`QTextStream` 3. **编码转换**:与非Qt代码交互时需显式指定编码格式 4. **空值处理**:区分`QString()`(空字符串)和`QString::null`(null状态) 六、适用场景 - 需要处理多语言文本的应用程序 - 开发Qt Widgets/QML图形界面 - 处理文件路径、URL等系统相关字符串 - 需要与其他Qt类(如QVariant、QSettings)交互的场合 建议结合Qt官方文档中的`QStringList`(字符串列表)和`QTextCodec`(编码转换)类一起学习,以构建完整的字符串处理解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值