找回密码
 立即注册
Qt开源社区 门户 查看内容

QT软件开发-第一章 字符串类介绍

2019-4-11 06:17| 发布者: admin| 查看: 2188| 评论: 0

摘要: 点击上方蓝字关注我们字符串是图形界面的基石,虽然控件和图标看起来直观,但还是必定要使用字符串来显示信息。标准C++提供了两种字符串,一种是C语言风格的字符数组,以”\0”结束。另一种是字符串类String,QT字符 ...


点击上方蓝字关注我们





字符串是图形界面的基石,虽然控件和图标看起来直观,但还是必定要使用字符串来显示信息。标准C++提供了两种字符串,一种是C语言风格的字符数组,以”\0”结束。另一种是字符串类String,QT字符串类QString功能更加强大。下面将介绍QString 的常见使用,QString 的互相转换、QString 涉及的运算符、QString 字符串查询和操作、利用 QTextStream 对 QString 做输入输出操作等。

1.6.1 QString支持的运算符


=

赋值运算符。

+=

追加。将运算符左边和右边字符串拼接后,赋值给左边对象。

<

小于号。左边字符串字典序比右边的靠前时,表达式为真。

<=

小于等于。左边字符串字典序比右边的靠前或相同时,表达式为真。

==

等于。二者字典序是一致的时候为真。

!=

不等于。二者字典序不一样的时候为真。

>

大于。左边字符串字典序比右边的靠后时,表达式为真。

>=

大于等于。左边字符串字典序比右边的靠后或相同时,表达式为真。

[]

类似数组取数的中括号,从指定位置取出 QChar 字符,另外还可以修改指定位置的 QChar 字符。

+

拼接。这是个友元函数,将两个字符串拼接后返回全新的字符串对象。

1.6.2 常用的构造类型


QString()

QString(QChar ch)

QString(int size, QChar ch)

QString(const char *str)

QString(const QByteArray &ba)

常用支持传入的类型包括:C语言风格的字符串,QByteArray类型,QChar类型,QString类型。

清空QString字符串可以使用clear()成员函数。 使用QString类需要加#include <QString>头文件。

1.6.3 基本类型转QString类型


以下属于QString类的静态函数接口,可以单独直接调用。number属于重载函数,支持的类型包括C语言风格的字符串,QByteArray类型,QChar类型,QString类型,QLatin1String类型等。

1. 整型转QString原型示例:

static QString number(int, int base=10);

2. 整数转QString类型示例:

QString str;

str=QString::number(888);

//str =="888"

除了以上的静态函数以外,QString还提供了setNum成员函数实现的相同的功能。setNum也是重载函数,支持的类型与number函数支持的类型一样。

QString &setNum(int n, int base = 10)

3. 整数转QString类型示例:

QString str;

str.setNum(888);

//str =="888"

1.6.4 QString类型转基本数据类型


函数接口:

short  toShort(bool *ok=0, int base=10) const;

ushort toUShort(bool *ok=0, int base=10) const;

int toInt(bool *ok=0, int base=10) const;

uint toUInt(bool *ok=0, int base=10) const;

long toLong(bool *ok=0, int base=10) const;

ulong toULong(bool *ok=0, int base=10) const;

qlonglong toLongLong(bool *ok=0, int base=10) const;

qulonglong toULongLong(bool *ok=0, int base=10) const;

float toFloat(bool *ok=0) const;

double toDouble(bool *ok=0) const;

示例:

QString str_1("12345");

qDebug()<<"int  :"<<str_1.toInt();

qDebug()<<"long :"<<str_1.toLong();

QString str_2("123.45");

qDebug()<<"flaot:"<<str_2.toFloat();

/*

输出结果:

int : 12345

long : 12345

flaot: 123.45

*/

注意:如果QString字符串有小数点,转整型会失败,返回0。

比如:

QString str_2("123.45");

qDebug()<<"int:"<<str_2.toInt();  //输出错误。


1.6.5 QString转QByteArray类型


QByteArray类是QT提供了一个字节数组类,可以通过QByteArray类将QString类的字符串转为C语言风格类型的字符串。QByteArray和QString的方法和属性相似,可以参考QString。

以下是QString类转QByteArray类函数接口:

QByteArray  toLatin1() const

QByteArray  toLocal8Bit() const   //支持中文编码

QByteArray QString::toUtf8() const  //转为UTF-8编码

示例:

QString str("12345");

QByteArray text=str.toLocal8Bit();

qDebug()<<text.data(); //转为C语言风格的字符串输出

//输出结果:12345

1.6.6 QString类转char类型字符串


将QString类转为char类型的字符串需要考虑中文的支持。

1. 不包含中文的转换方式

QString  str("123456789");

char*  ch;

QByteArray by = str.toLatin1();

ch=by.data();

qDebug()<<ch;

以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就不正确。

2. 包含中文的转换方式

    1) 将上面代码的第三行改为:QByteArray by = str.toLoacl8Bit();    //toLoacl8Bit支持中文

    2) 先将QString转为标准库中的string类型,然后将string转为char*,如下:

QString  str="123456789中文转换输出";

std::string stdstr = str.toStdString();

const char* ch = stdstr.c_str();

qDebug()<<ch;

//输出结果:123456789中文转换输出

1.6.7 字符串拼接


QString重载了”+=”运算符,可以直接使用+=运算符进行拼接。 除了运算符可以进行拼接之外,QString还提供了一个append成员函数来完成拼接功能。

1. 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)

2. 字符串拼接示例

QString x = "free";

QString y = "dom";

x.append(y);

//x == "freedom"

或者:

QString x = "free";

QString y = "dom";

x+=y;

// x == "freedom"

1.6.8 计算字符串的个数


QString提供了两个函数接口返回当前对象中保存的字符串数据个数。

1. 函数原型:

int QString::count() const

int QString::size() const

注意:中文和英文在这里都算做一个。如果要将中文计算为两个字符,需要转为QByteArray类型再计算。

2. 示例

QString str("QT5学习");

qDebug()<<str.size();

qDebug()<<str.count();

//结果输出为5

3. 示例

QString str("QT5学习");

QByteArray byte=str.toLocal8Bit();

qDebug()<<byte.size();

//结果输出为7

1.6.9 QString标记替换


标记替换类似于C语言中的sprintf格式化打印函数,用来将不同类型的数据转为字符串类型。QString中也提供了支持C语言风格的sprintf函数,用法与C语言中的sprintf函数一样。由于sprintf是属于过时的函数,QT官方推荐QString类中主要使用arg成员函数进行格式打印。

1. 函数原型

QString arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char( ' ' )) const

arg是一个重载函数。比较多,这里只列出了一个函数,其他函数可以查看QT帮助文档。

1) 字符串替换示例:

QString text("abcd");

text+=QString(" %1 %2 %3 %4").arg("11","22","33","44");

qDebug()<<text;

//结果输出为"abcd 11 22 33 44"

%号就是一个标记符,替换arg成员函数的对应形参。

注意:一个argv的参数字符串替换的%号最大个数为%9。超过了9个需再加一个.arg()即可。

2) 整数替换示例:

QString text("abcd");

text+=QString(" %1 %2 %3 %4").arg(11).arg(22).arg(33).arg(44);

qDebug()<<text;

//结果输出为"abcd 11 22 33 44"

3) 浮点数替换示例:

QString text("abcd");

text+=QString(" %1 %2 %3 %4").arg(11.88).arg(22.88).arg(33.88).arg(44.88);

qDebug()<<text;

//结果输出为"abcd 11.88 22.88 33.88 44.88"

4) 字符替换示例:

QString text("abcd");

text+=QString(" %1 %2 %3 %4").arg('A').arg('B').arg('C').arg('D');

qDebug()<<text;

//结果输出为"abcd A B C D"

1.6.10字符串比较


字符串比较可以设置大小写敏感,compare函数是QString提供的一个静态函数。

1. 函数原型

[static] int QString::compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

2. 字符串比较示例

int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);  // x == 0

int y = QString::compare("auto", "Car", Qt::CaseSensitive);     // y > 0

int z = QString::compare("auto", "Car", Qt::CaseInsensitive);   // z < 0

3. 大小写敏感设置:

enum Qt::CaseSensitivity

Qt::CaseInsensitive 0    //不敏感

Qt::CaseSensitive 1      //敏感

字符串比较也可以使用符号进行比较,QString重载了 > 、 < 、== 、<= 、>=符号。

1.6.11字符串查找


字符串查找在解析字符串数据的时候用的比较多,C语言中可以使用strstr函数进行字符串查找。对于字符串查找功能QString类提供了contains和count两个成员函数。

1. 函数原型

bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

int QString::count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

2. 大小写敏感设置:

enum Qt::CaseSensitivity

Qt::CaseInsensitive 0    //不敏感

Qt::CaseSensitive 1      //敏感

3. 查找指定字符串是否存在:

QString str = "Peter Pan";

str.contains("peter", Qt::CaseInsensitive);    // returns true

4. 查找字符串出现的次数:

QString str="123132123";

qDebug()<<str.count("123");

//结果输出为2

1.6.12 填充字符串


使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替。

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

例:

     QString str = "Berlin";

     str.fill('z');

     // str == "zzzzzz"

     str.fill('A', 2);

     // str == "AA"

1.6.13 从字符串里查找相同的某个字符串str。


int QString::indexOf ( const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) 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

1.6.14 指定位置插入字符串


QString & QString::insert ( int position, const QString & str )

例如:

QString str = "Meal";

str.insert(1, QString("ontr"));

// str == "Montreal"

1.6.15 判断字符串是否为空


bool QString::isEmpty () const

例如:

 QString().isEmpty();            // returns true

 QString("").isEmpty();          // returns true

 QString("x").isEmpty();         // returns false

 QString("abc").isEmpty();       // returns false

1.6.16 判断字符串是否存在


bool QString::isNull () const

例如:

 QString().isNull();             // returns true

 QString("").isNull();           // returns false

 QString("abc").isNull();        // returns false

1.6.17 从左向右截取字符串


QString QString::left ( int n ) const

例如:

QString x = "Pineapple";

QString y = x.left(4);      // y == "Pine"

1.6.18 从中间截取字符串


QString QString::mid ( 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"

1.6.19 删除字符串中间某个字符


QString & QString::remove ( int position, int n )

例如:

QString s = "Montreal";

s.remove(1, 4);

// s == "Meal"

1.6.20 替换字符串中的某些字符


QString & QString::replace ( int position, int n, const QString & after )

例如:

QString x = "Say yes!";

QString y = "no";

x.replace(4, 3, y);

// x == "Say no!"

1.6.21 以某个字符切割字符串


QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const

例如:

QString str;

QString csv = "forename,middlename,surname,phone";

QString path = "/usr/local/bin/myapp"; // First field is empty

QString::SectionFlag flag = QString::SectionSkipEmpty;

str = csv.section(',', 2, 2);   // str == "surname"

str = path.section('/', 3, 4);  // str == "bin/myapp"

str = path.section('/', 3, 3, flag); // str == "myapp"

1.6.22 把整型,浮点型,或其他类型转化为QString


QString & QString::setNum ( uint n, int base = 10 )



技术合作与咨询

QQ:1126626497
关注我长按二维码可识别微信号:xl1126626497


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:DS小龙哥 嵌入式技术资讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

1人点赞鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)


公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了