Qt QString类 常用方法

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"

(23)QString & QString::lastIndexOf 如何去掉文件路径最后一个反斜杠的内容

QString strTemp = “E:\\hell\\word\\detect.txt”
int nIndex = strTemp.lastIndexOf('\\');
strTemp = strTemp.left(nIndex);

(24)QString 的综合代码实现,Qt新建一个控制台应用,下面是 main.cpp 的代码.

#include <QCoreApplication>
#include <QTextCodec>
#include <QDebug>
#include <QStringList>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    qDebug() << QObject::tr("以下是编辑字符串操作:") << endl;

    QString str = "hello";
    qDebug() << QObject::tr("字符串大小:") << str.size();    //大小为5
    str[0] = QChar('H');                                   //将第一个字符换为'H'
    qDebug() << QObject::tr("第一个字符:") << str[0];        //结果为'H'
    str.append(" Qt");                  //向字符串后添加"Qt"
    str.replace(1,4,"i");               //将第1个字符开始的后面4个字符替换为字符串"i"
    str.insert(2," my");                //在第2个字符后面插入"my"
    qDebug() << QObject::tr("str为:") << str;        //结果为 Hi my Qt
    str = str + "!!!";                  //将两个字符串组合
    qDebug() << QObject::tr("str为:") << str;        //结果为 Hi my Qt!!!

    str = " hi\r\n Qt! \n";
    qDebug() << QObject::tr("str为:") << str;
    QString str1 = str.trimmed();       //去除字符串两端的空白字符
    qDebug() << QObject::tr("str1为:") << str1;
    QString str2 = str.simplified();    //去除字符串两端和中间多余的空白字符
    qDebug() << QObject::tr("str2为:") << str2;  //结果为 hi Qt!

    str = "hi,my,Qt";
    //从字符串中有","的地方将其分为多个子字符串
    //QString::SkipEmptyParts表示跳过空的条目
    QStringList list = str.split(",",QString::SkipEmptyParts);
    qDebug() <<QObject::tr("str拆分后为:") << list;     //结果为 hi,my,Qt
    str = list.join(" ");       //将各个子字符串组合为一个字符串,中间用" "隔开
    qDebug() << QObject::tr("list 组合后为:") << str;   //结果为 hi my Qt

    qDebug() << QString.isNull();           //结果为true
    qDebug() << QString.isEmpty();          //结果为true
    qDebug() << QString.isNull();           //结果为false
    qDebug() << QString.isEmpty();          //结果为true

    qDebug() << endl << QObject::tr("以下是在字符串中进行查询的操作:") << endl;
    str = "yafeilinux";
    qDebug() << QObject::tr("字符串为:") << str;
    //执行下面一行代码,结果为linux
    qDebug() << QObject::tr("包含右侧5个字符的子字符串:") << str.right(5);
    //执行下面一行代码后,结果为yafei
    qDebug() << QObject::tr("包含左侧5个字符的子字符串:") << str.left(5);
    //执行下面一行代码后,结果为fei
    qDebug() << QObject::tr("包含第2个字符以后3个字符的子字符串:") << str.mid(2,3); //结果为fei
    qDebug() << QObject::tr("'fei'的位置:") <<str.indexOf("fei");     // 结果为2
    qDebug() << QObject::tr("str的第0个字符:") << str.at(0);           // 结果为y
    qDebug() << QObject::tr("str中'i'字符的个数:") << str.count('i');  // 结果为2
    qDebug() << QObject::tr("str是否以”ya“开始?") << str.startsWith("ya");      // 结果为true
    qDebug() << QObject::tr("str是否以”linux“结尾?") << str.endsWith("linux");  // 结果为true
    qDebug() << QObject::tr("str是否包含”lin“字符串?") << str.contains("lin");  // 结果为true
    QString temp = "hello";
    if(temp > str)
        qDebug() << temp;  // 两字符串进行比较,结果为yafeilinux
    else
        qDebug() << str;

    qDebug() << endl << QObject::tr("以下是字符串的转换操作:") <<endl;

    str = "100";
        qDebug() << QObject::tr("字符串转换为整数:") << str.toInt(); //结果为100

    int num = 45;
        qDebug() << QObject::tr("整数转换为字符串:") << QString::number(num); // 结果为"45"

    str = "FF";
        bool ok;
        int hex = str.toInt(&ok,16);
        qDebug() << "ok: "<< ok << QObject::tr("转换为十六进制:") << hex; // 结果为ok:true 255

    num = 26;
        qDebug() << QObject::tr("使用十六进制将整数转换为字符串:")
                 << QString::number(num,16); //结果为1a

    str = "123.456";
        qDebug() << QObject::tr("字符串转换为浮点型:") << str.toFloat(); // 结果为123.456

    str = "abc";
        qDebug() << QObject::tr("转换为大写:") << str.toUpper(); // 结果为ABC

    str = "ABC";
        qDebug() << QObject::tr("转换为小写:") <<str.toLower(); // 结果为abc

    int age = 25;
        QString name = "yafei";
        str = QString("name is %1, age is %2").arg(name).arg(age); // name代替%1,age代替%2
        qDebug() << QObject::tr("更改后的str为:") << str; // 结果为name is yafei,age is 25

    str = "%1 %2";
        qDebug() << str.arg("%1f","hello");       // 结果为%1f hello
        qDebug() << str.arg("%1f").arg("hello");  // 结果为hellof %2

    str = QString("ni%1").arg("hi",5,'*');
        qDebug() << QObject::tr("设置字段宽度为5,使用'*'填充:") << str;  // 结果为ni***hi

    qreal value = 123.456;
        str = QString("number: %1").arg(value,0,'f',2);
        qDebug() << QObject::tr("设置小数点位数为两位:") << str; // 结果为"number:123.45"

    qDebug() << QObject::tr("将str转换为const char* :") << qPrintable(str); // 结果为number:123.45,不会显示引号

    return a.exec();
}

   转载自 : https://www.cnblogs.com/Braveliu/archive/2013/01/09/2853117.html

猜你喜欢

转载自blog.csdn.net/Superman___007/article/details/87283039