QT学习笔记(十一):QString类

QT学习笔记(十一):QString类

1、概述

1.1 QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中。QString 类在实现上有以下特征:

1)字符串采用 Unicode 内部编码,可以表示世界上大多数语言的文字;
2)字符串的存储有引用计数,当一个 QString 对象被复制为另一个 QString 对象时,它们实际上指向相同的存储空间,仅仅是增加一个引用计数;
3)隐式共享:在后台,QString使用隐式共享来减少内容使用和避免不必要的复制,这也有助于减少储存16为字符的固有开销,只有当函数向它写入时才会复制该数据或者当指向相同存储空间的多个 QString 对象中的一个要被修改时,才将真正复制一个新的字符串并进行修改。
1.2 构造函数

Qstring();                                        // 构造空字符串

QString(QChar ch);                           // 由 QChar 对象 ch构造

QString(const QChar *pch, int size);    // 由 QChar 数组pch构造,size 是数组大小

QString(const QString &obj);              // 拷贝构造函数

QString(const char *str);                  //  由字符串 str 构造,str是一个普通字符串

参考博客:QT之QString
官方说明QString Class

2、编辑操作

在这里插入图片描述
编辑操作QT控制台程序 示例:

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

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

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

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

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

    qDebug() << QString().isNull();     // 结果为true
    qDebug() << QString().isEmpty();    // 结果为true
    qDebug() << QString("").isNull();   // 结果为false
    qDebug() << QString("").isEmpty();  // 结果为true
    
    return a.exec();
}

运行结果:
在这里插入图片描述

3、查询操作

在这里插入图片描述
查询操作QT控制台程序 示例:

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

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    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);
    //结果为2
    qDebug() << QObject::tr("'fei'的位置:") << str.indexOf("fei"); 
    //结果为y
    qDebug() << QObject::tr("str的第0个字符:") << str.at(0); 	
    //结果为2
    qDebug() << QObject::tr("str中'i'字符的个数:") << str.count('i'); 
    // 结果为true
    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");
    
    QString temp = "hello";
    // 两字符串进行比较,结果为yafeilinux
    if(temp > str) 
    	qDebug() << temp; 
    else 
    	qDebug() << str;

    qDebug() << endl << QObject::tr("以下是字符串的转换操作:") << endl;
    str = "100";
    // 结果为100
    qDebug() << QObject::tr("字符串转换为整数:") << str.toInt(); 
    int num = 45;
    //结果为"45"
    qDebug() << QObject::tr("整数转换为字符串:") << QString::number(num);
    str = "FF";
    bool ok;
    int hex = str.toInt(&ok, 16);
    // 结果为ok:true 255
    qDebug() << "ok: "<< ok << QObject::tr("转换为十六进制:") << hex;
    num = 26;
    //结果为1a
    qDebug() << QObject::tr("使用十六进制将整数转换为字符串:")<< QString::number(num, 16);
    str = "123.456";
    //结果为123.456
    qDebug() << QObject::tr("字符串转换为浮点型:") << str.toFloat();
    str = "abc";
    // 结果为ABC
    qDebug() << QObject::tr("转换为大写:") << str.toUpper();
    str = "ABC";
    // 结果为abc
    qDebug() << QObject::tr("转换为小写:") <<str.toLower();
    
    int age = 25;
    QString name = "yafei";
    // name代替%1,age代替%2
    str = QString("name is %1, age is %2").arg(name).arg(age);
    // 结果为name is yafei, age is 25
    qDebug() << QObject::tr("更改后的str为:") << str;
    str = "%1 %2";
    // 结果为%1f hello
    qDebug() << str.arg("%1f","hello");    
    // 结果为hellof %2  
    qDebug() << str.arg("%1f").arg("hello"); 
    str = QString("ni%1").arg("hi",5,'*');
    //结果为ni***hi
    qDebug() << QObject::tr("设置字段宽度为5,使用'*'填充:") << str;
    qreal value = 123.456;
    str = QString("number: %1").arg(value,0,'f',2);
    //结果为"number:123.45
    qDebug() << QObject::tr("设置小数点位数为两位:") << str;  
    // 执行下面一行代码,结果为number:123.45不会显示引号
    qDebug() << QObject::tr("将str转换为const char* :") << qPrintable(str);


    return a.exec();
}

运行结果:
在这里插入图片描述

3、转换操作

关于QString::arg()函数详解请参见: QT学习笔记(六):QString::arg()函数用法小结.
在这里插入图片描述在这里插入图片描述在这里插入图片描述
转换操作QT控制台程序 示例:

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

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << endl << QObject::tr("以下是字符串的转换操作:") << endl;
    
    str = "100";
    // 结果为100
    qDebug() << QObject::tr("字符串转换为整数:") << str.toInt(); 
    int num = 45;
    //结果为"45"
    qDebug() << QObject::tr("整数转换为字符串:") << QString::number(num);
    str = "FF";
    bool ok;
    int hex = str.toInt(&ok, 16);
    // 结果为ok:true 255
    qDebug() << "ok: "<< ok << QObject::tr("转换为十六进制:") << hex;
    num = 26;
    //结果为1a
    qDebug() << QObject::tr("使用十六进制将整数转换为字符串:")<< QString::number(num, 16);
    str = "123.456";
    //结果为123.456
    qDebug() << QObject::tr("字符串转换为浮点型:") << str.toFloat();
    str = "abc";
    // 结果为ABC
    qDebug() << QObject::tr("转换为大写:") << str.toUpper();
    str = "ABC";
    // 结果为abc
    qDebug() << QObject::tr("转换为小写:") <<str.toLower();
    
    int age = 25;
    QString name = "yafei";
    // name代替%1,age代替%2
    str = QString("name is %1, age is %2").arg(name).arg(age);
    // 结果为name is yafei, age is 25
    qDebug() << QObject::tr("更改后的str为:") << str;
    str = "%1 %2";
    // 结果为%1f hello
    qDebug() << str.arg("%1f","hello");    
    // 结果为hellof %2  
    qDebug() << str.arg("%1f").arg("hello"); 
    str = QString("ni%1").arg("hi",5,'*');
    //结果为ni***hi
    qDebug() << QObject::tr("设置字段宽度为5,使用'*'填充:") << str;
    qreal value = 123.456;
    str = QString("number: %1").arg(value,0,'f',2);
    //结果为"number:123.45
    qDebug() << QObject::tr("设置小数点位数为两位:") << str;  
    // 执行下面一行代码,结果为number:123.45不会显示引号
    qDebug() << QObject::tr("将str转换为const char* :") << qPrintable(str);

    return a.exec();
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值