Qt开发(一) QString类的使用

1. QString概述
开发中,字符串是必不可少的。C++ 中提供两种字符串:传统的 C 语言型以 “\0” 结尾的字符数组和 std::string 类。而在 Qt 开发中,我们更多的是使用Qt专有的 QString 类,相似于 C++ 中的 std::string类,但是又有不同,因为 QString 支持 16位的 Unicode值。开发中使用 QString 时,不用刻意去担心 如何分配足够的内存空间 或是 确保数据以 “\0” 结尾的问题。这些 QString 都默默为我们搞定了,而且可以嵌入 “\0”字符。length() 函数会返回包括被嵌入的 “\0” 字符的整个字符串的大小。

2. QString 中常用的成员函数
(1) QString 操作符 + 和 += (连接两个字符串 和 追加字符串)
注意: 需 #include 头文件 QString

QString str1 = "Password:";
QString userPassword = "HIKVISION";
str1 += userPassword;
qDebug()<<"str1: "<<str1;

打印结果: str1:  "Password:HIKVISION"

(2) QString::append() 字符串追加函数
append 函数和 += 操作符功能相同

  QString str2 = "User:";
  QString userName = "lixiaogang5";
  str2.append(userName);
  qDebug()<<str2;
打印结果:"User:lixiaogang5"

(3) QString::sprintf() 字符串连接函数
备注:QString::sprintf()函数支持与C/C++库中的sprintf 函数相同的格式说明符。

 QString str3 =NULL;
 str3.sprintf("%s %s","Password:","HIKVISION");
 qDebug()<<str3;
打印结果:"Password: HIKVISION"

(4) QString::arg() 函数
该函数用来从其他 字符串或 数组 来建立一个字符串。

QString str4 = nullptr;
str4 = QString("%1 %2 %3 %4 (%5s-%6s)").arg("Time").arg("accuracy") \
.arg("range").arg("in").arg(1375).arg(1395);
qDebug()<<str4;

打印结果:
"Time accuracy range in (1375s-1395s)"

(5) QString::number() 函数 将数字转换为字符串

函数原型为:
QString QString::number(double n, char format = 'g', int precision = 6) [static]

功能: 根据指定格式 format 和 精度 precision 返回 n 的字符串形式。其中format可取值如下:

Format  Meaning
e   format as [-]9.9e[+|-]999
E   format as [-]9.9E[+|-]999
f   format as [-]9.9
g   use e or f format, whichever is the most concise
G   use E or f format, whichever is the most concise
 QString str5 = nullptr;
 str5 = QString::number(100.011,'g',6);
 qDebug()<<"str5:"<<str5;
打印结果:str5: "100.011"

注意: QString::setNum() 也能实现 number 的效果

 QString str5 = nullptr;
 str5.setNum(100.011,'g',6);
 qDebug()<<str5;
打印结果:  "100.011"

(6) QString::toInt() 、toLongLong()、toDouble() 等函数 将 字符串 转换为 数字
注意:这些函数接收一个任选的bool 变量的指针,并且根据 转换成功与否 来将 变量值 设为 true 或false。若转换成功,设为true(1),反之为false(0);

int hex = 0;
QString str6 = "10086";
bool flagOkorFalse;
hex = str6.toInt(&flagOkorFalse,16);
if( true == flagOkorFalse)
{
    qDebug()<<"Conversion success";
}
else
{
   qDebug()<<"Conversion failured.";
}
qDebug()<<hex;

打印结果:
Conversion success
65670

(7) QString::min() 从字符串中根据提取出 对应部分 字符串

 QString str6 = "See farther, go farther";
 qDebug()<<str6.mid(13,2);

打印结果: "go"

min 函数的原型如下:

QString QString::mid(int position, int n = -1) const
//常量成员函数

min函数有2个参数,第二个参数默认为-1;若第二个参数采用默认,则 min()函数返回在 给定位置开始到字符串末端结束的字串。

QString str6 = "See farther, go farther";
qDebug()<<str6.mid(13);

打印结果: "go farther"

(8) QString::left()、QString::right() 返回字符串的左边n个字符串、右边n个字符串

QString str7 = "See farther, go farther";
qDebug()<<str7.left(12)<<" "<<str7.right(10);
//其中参数1210表示返回的字符个数,而不是下标

打印结果: "See farther,"   "go farther"

(8) QString::indexOf() 查明一个字符串是否包含一个特定的字符、字串或正则表达式

 QString str7 = "See farther, go farther";
 int index = str7.indexOf("farther");
 if(-1 == index)
    qDebug()<<"To find the failure";
 else qDebug()<<index;
打印结果:4

成功则返回对应字符串的起始位置下标;失败则返回 -1.

(9) QString::startsWith() 和 QString::endsWith() 检查字符串是否以某个字符(串)开始或结束

 QString str7 = "See farther, go farther";
    if(str7.startsWith("See") && str7.endsWith("farther"))
    {
        qDebug()<<"TO DO...";
    }else{
        qDebug()<<"Not";
    }
打印结果:TO DO...

注: 利用 left 和 right 也能实现同样的效果,但是使用 startsWith 和 endsWith 更加简单和快捷。

    QString str7 = "See farther, go farther";
    if(str7.left(3) == "See" && str7.right(7) == "farther")
    {
        qDebug()<<"TO DO...";
    }else{
        qDebug()<<"Not";
    }

打印结果:TO DO...

(10) == (比较操作符)和 toUpper()、toLower()
== 操作符比较字符串时是区分大小的。如下:

    QString str8 = "user:";
    QString str9 = "User:";
    if(str8 > str9)
        qDebug()<<"greator";
    else
        qDebug()<<"less";

打印结果: greator //因为u的ASCII码 > U的ASCII码

若想比较两个字符串的大小,而且比较并不关系大小写,toLower 和 toUpper 是一个不错的选择。

    QString str8 = "user:";
    QString str9 = "User:";
    if(str8.toUpper() == str9.toUpper())
        qDebug()<<"equal";
    else
        qDebug()<<"not equal";

打印结果:equal

(11) QString::replace() 使用一个字符串来代替另一个字符串中的一部分

    QString str10 = "Happy day";
    qDebug()<<str10.replace(1,4,"APPY");
打印结果:"HAPPY day"

可以使用 remove 和 insert 组合来达到 replace 的效果。

   QString str10 = "Happy day";
   str10.remove(1,4);
   str10.insert(1,"APPY");
   qDebug()<<str10;
打印结果: "HAPPY day"

(12) QString::trimmed() 删除字符串两端的空白处 的空格(包括 空格符、制表符、换行符等)

    QString str11 = "  Just \n do  \nit. \n"; 
    //**Just*\n*do**\nit.*\n (*号代表空格)
    /*======= trimmed之后 ===============*/
    //Just*\n*do**\nit.
    qDebug()<<str11.trimmed();
打印结果:
"Just 
 do  
it."

(13) QString::simplified() 用简单的空格符代替字符串内部每一连续空白处的空格

    QString str11 = "Just \n do  \nit.";
    qDebug()<<str11.trimmed();

打印结果:
"Just 
 do  
it."

(14) QString::split() 把字符串分解成一些QStringList字串

1:
    QString str12 = "Hangzhou welcomes you";
    QStringList stringList = str12.split(" ");
    QStringList::const_iterator conIt =  stringList.constBegin();
    for (; conIt != stringList.constEnd(); ++conIt)
       qDebug() << (*conIt).toLocal8Bit().constData() ;

打印结果:
Hangzhou
welcomes
you

把str12 以空格的形式分成了 Hangzhou welcomes you 3个子串。

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    QStringList stringList = str12.split(",");
    QStringList::const_iterator conIt =  stringList.constBegin();
    for (; conIt != stringList.constEnd(); ++conIt)
       qDebug() << (*conIt).toLocal8Bit().constData() ;

打印结果:
Hangzhou
Shanghai
GuiYang

把str12 以逗号的形式分成了 Hangzhou Shanghai GuiYang3个子串。

(15) QString::empty() 和 QString::length() 判断字符串是否为空 和 返回字符串长度

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    if(true == str12.isEmpty() || 0 == str12.length())
        qDebug()<<"EMPTY";
    else
        qDebug()<<str12.length();


打印结果:25

(16) QString::join() 将QStringList中的项连接起来形成一个单一的字符串。

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    QStringList stringList = str12.split(",");
        stringList.sort();  //按字母表顺序排序
    QString tmpStr = stringList.join(" ");
    qDebug()<<tmpStr;


打印结果:"GuiYang Hangzhou Shanghai"

(17) QString::toAscii() 和 QString::toLatin1() 显示的将QString转换为 const char *类型字符串

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    printf("str12[%s]\n",str12.toLatin1().data());
打印结果:str12[Hangzhou,Shanghai,GuiYang]

(17) QString::fromLocal8bit() 和 QString::fromUtf8() 、 QString::fromUtf16() 显示的将const char *转换为 QString字符串

    const char *ch = "hello";
    QString tempStr = QString::fromUtf8(ch);
    qDebug()<<tempStr;

打印结果:"hello"

猜你喜欢

转载自blog.csdn.net/lixiaogang_theanswer/article/details/80793890