QString类(常用函数)
QString类提供了一个Unicode文本和经典的C以零结尾的字符数组的抽象。
(1)QString::QString()
构造一个零字符串。这是一个不被分配任何东西的字符串,也就是说长度和数据指针都为0。如何理解?请看下面这个成员函数。
(2)bool QString::isNull()
如果字符串为零,返回真。零字符串总是空的。
QString a; // a.unicode() == 0,a.length() == 0
a.isNull(); // 真,因为a.unicode() == 0
a.isEmpty(); // 真
(3)bool QString::isEmpty()
如果字符串为空,也就是如果length() == 0,返回真。因此,零字符串也是空字符串。
QString a("");
a.isEmpty(); // 真
a.isNull(); // 假
QString b;
b.isEmpty(); // 真
b.isNull(); // 真
NULL字符串和空(empty)字符串的区别:
一个NULL字符串就是使用QString的默认构造函数或者使用(const char*)0作为参数的构造函数的创建的QString字符串对象;
QString().isNull(); //结果为true (1)
QString((const char *)0).isNull(); //结果true (2)
QString("").isNull(); //结果为false (3)
一个空的字符串是一个大小为0的字符串。
QString().isEmpty(); //结果为true (4)
QString((const char *)0).isEmpty(); //结果true (5)
QString("").isEmpty(); //结果为true (6)
一个NULL字符串一定是一个空字符串 对比(1)(2)(4)(5)可以得出
而一个空字符串未必是一个NULL字符 对比(3)(6)可以得出
(4)uint QString::length()
返回字符串的长度。零字符串和空字符串的长度都为0。
(5)QString & QString::append(const QString & str)
把str添加到字符串中并且返回结果的引用。
QString string = "Test";
string.append( "ing" ); // string == "Testing"
(6)QString QString::arg(const QString & a, int fieldwidth = 0)
这个函数将返回使用a来替换最低层出现的%i(i为’1’或’2’或……‘9’)的字符串。
fieldwidth值指定了填充到a中的最小空间。正值将产生右对齐文本,负值将产生左对齐文本。
QString firstName( "liu" );
QString lastName( "yong" );
QString fullName;
fullName = QString( "First name is '%1', last name is '%2'" ).arg( firstName ) .arg( lastName );
fullName == First name is 'liu', last name is 'yong'
(7)QChar QString::at(uint i) const
返回在索引i处的字符,或者如果i超过字符串的长度返回0。
const QString string( "abcdefgh" );
QChar ch = string.at( 4 );
// ch == 'e'
(8)int QString::compare(const 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
(9)int QString::contains(QChar c, bool cs = TRUE)
返回在这个字符串中字符c出现的次数。
如果cs为真,那么匹配是区分大小写的。如果cs为假,那么匹配是不区分大小写的。
QString string( "Trolltech and Qt" );
int i = string.contains( 't', FALSE ); // i == 3
bool contains(const QString &str 或QChar ch) //判断是否包含字符或者字符串
(10)bool QString::startsWith(const QString & s)
如果字符串以s开始,返回真,否则返回假。
QString string("Bananas");
bool a = string.startsWith("Ban"); // a == TRUE
(11)QString & QString::fill(QChar c, int len = -1 )
填充字符串为len个字符的值c,并且返回字符串的引用。
如果len为负数(默认),当前字符串长度被使用。
QString str;
str.fill( 'g', 5 ); // string == "ggggg"
(12)int QString::find(const QRegExp & rx, int index = 0) const
从位置index开始,找到常量正则表达式rx第一次出现的位置。如果index为-1,搜索从最后一个字符开始,如果是-1,从紧挨着最后一个字符的字符开始,依此类推。
返回rx第一次出现的位置,如果rx没有被找到,返回-1。
QString string( "bananas" );
int i = string.find( QRegExp("an"), 0 ); // i == 1
(13)QString & QString::insert(uint index, const QString & s)
把s插入到字符串的index位置之前。
如果index超过字符串的结尾,字符串被填充空格扩展到index长度并且然后s被添加,返回这个字符串的引用。
QString string( "I like fish" );
str = string.insert( 2, "don't " );
// str == "I don't like fish"
(14)QString QString::left(uint len)
返回包含字符串最左面的len个字符的子字符串。
如果len超过字符串的长度,则整个字符串被返回。
同理还有QString QString::right(uint len)
QString s = "Pineapple";
QString t = s.left( 4 ); // t == "Pine"
(15)int QString::localeAwareCompare(const QString & s1, const QString & s2) [静态]
对s1和s2进行比较,如果s1小于、等于或者大于s2,就返回小于、等于或者大于0的整数。
这个比较是基于本地的并且也是基于平台的方式。使用这个函数可以把排好序的字符串列表呈现给用户。
(16)QString QString::lower()
返回由这个字符串转换的小写字符串。
QString string( "TROlltECH" );
str = string.lower(); // str == "trolltech"
QString toLower() //转换为小写
QString toUpper() //转换成大写
(17)QString QString::number (long n, int base = 10) [静态]
一个把数字n转换为字符串的方便函数,n被基于base表示,默认为10,并且必须在2到36之间。
long a = 63;
QString str = QString::number( a, 16 ); // str == "3f"
QString str = QString::number( a, 16 ).upper(); // str == "3F"
(18)QString & QString::setNum(long n, int base = 10)
设置字符串为打印的数据n,n是基于base并且返回这个字符串的引用。
base默认为10并且必须在2到36之间。
QString string;
string = string.setNum( 1234 ); // string == "1234"
(19)int QString::toInt(bool *ok = 0, int base =10) const
返回由这个字符串转化的int值,是基于base的,默认为10并且必须在2到36之间。
如果转化发生错误,ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则ok被设置为真。
QString str( "FF" );
bool ok;
int hex = str.toInt( &ok, 16 ); // hex == 255, ok == TRUE
int dec = str.toInt( &ok, 10 ); // dec == 0, ok == FALSE
其他转换
float toFloat(bool *ok = 0)
long toLong(bool *ok = 0, int base = 10) //长整型数
short toShort(bool *ok = 0, int base = 10) //短整型数
uint toUInt(bool *ok = 0, int base = 10)
ulong toULong(bool *ok = 0, int base = 10)
ushort otUShort(bool *ok = 0, int base = 10)
(20)QString QString::trimmed()
移除字符串两端的空白字符。
QString str = " lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
(21) QString QString::mid(uint index, uint len = 0xffffffff)
返回包含这个字符串从index位置开始len个字符的字符串。
如果这个字符串为空或者index超出范围,返回零。
如果index + len超过这个字符串的长度,返回从index开始的整个字符串。
QString sEmpty;
QString sAfterMid0 = sEmpty.mid(1); //""
QString sObject("I love china.");
QString sAfterMid1 = sObject.mid(15);//""
QString sAfterMid2 = sObject.mid(2); //"love china."
QString sAfterMid3 = sObject.mid(2, sObject.length()); //"love china."
QString sAfterMid4 = sObject.mid(2, sObject.length() - 2); //"love china."
(22)QString & QString::remove(uint index, uint len)
从字符串中的index位置开始移除len个字符并且返回这个字符串的引用。
如果index超出字符串的长度,就什么也不发生。
如果index在字符串中间,但是index加上len超过字符串的结尾,这个字符串将从index开始被截短。
QString sObjectRem("I am a programmer.");
QString sAfterRem0 = sObjectRem.remove(20, 3); //"I am a programmer."
QString sAfterRem1 = sObjectRem.remove(2, 3); //"I a programmer."
QString sAfterRem2 = sObjectRem.remove(2, 20); //"I"
(23)QString & QString::replace(uint index, uint len, const QString & s)
从字符串中的index位置开始使用s替换len个字符,并且返回这个字符串的引用。
如果index超出字符串的长度,就什么也不被删除。
如果index有效并且index + len超过字符串的结尾,那么这个字符串将从index开始被截短,并且s被添加到字符串的结尾。
QString sObjectRep("The big pig.");
QString sAfterRep0 = sObjectRep.replace(20, 3, "liu"); //"The big pig."
QString sAfterRep1 = sObjectRep.replace(4, 3, "liu"); //"The liu pig."
QString sAfterRep2 = sObjectRep.replace(2, 20, "liu"); //"Thliu"
QString sObjectRep2("abcdefghijk.");
QString sAfterRep3 = sObjectRep2.replace(2, 20, "liu"); //"abliu"
(24) 转 char *
QString filename;
std::string str = filename.toStdString();
const char* ch = str.c_str();
QString str = "";
QByteArray ba = str.toLatin1(); // must
char* ch = ba.data();
不可以 str.toLatin1().data() 这样一步完成,否则可能会出错。
(25) char * 转QString
QString str = QString(QLatin1String(ch));
参考文档 https://www.cnblogs.com/Braveliu/archive/2013/01/09/2853117.html