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

  • 1、概述
  • 2、编辑操作
  • 3、查询操作
  • 3、转换操作

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";// 执行下面一行代码,大小为5qDebug() << 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 QtqDebug() << 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,QtqDebug() << QObject::tr("str拆分后为:") << list;          str = list.join(" ");                                    // 将各个子字符串组合为一个字符串,中间用" "隔开// 执行下面一行代码,结果为hi my QtqDebug() << QObject::tr("list组合后为:") << str;         qDebug() << QString().isNull();     // 结果为trueqDebug() << QString().isEmpty();    // 结果为trueqDebug() << QString("").isNull();   // 结果为falseqDebug() << QString("").isEmpty();  // 结果为truereturn 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;// 结果为linuxqDebug() << QObject::tr("包含右侧5个字符的子字符串:") << str.right(5);// 结果为yafeiqDebug() << QObject::tr("包含左侧5个字符的子字符串:") << str.left(5);// 结果为feiqDebug() << QObject::tr("包含第2个字符以后3个字符的子字符串:") << str.mid(2, 3);//结果为2qDebug() << QObject::tr("'fei'的位置:") << str.indexOf("fei"); //结果为yqDebug() << QObject::tr("str的第0个字符:") << str.at(0);     //结果为2qDebug() << QObject::tr("str中'i'字符的个数:") << str.count('i'); // 结果为trueqDebug() << QObject::tr("str是否以”ya“开始?") << str.startsWith("ya");// 结果为trueqDebug() << QObject::tr("str是否以”linux“结尾?") << str.endsWith("linux");// 结果为trueqDebug() << QObject::tr("str是否包含”lin“字符串?") << str.contains("lin");QString temp = "hello";// 两字符串进行比较,结果为yafeilinuxif(temp > str) qDebug() << temp; else qDebug() << str;qDebug() << endl << QObject::tr("以下是字符串的转换操作:") << endl;str = "100";// 结果为100qDebug() << 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 255qDebug() << "ok: "<< ok << QObject::tr("转换为十六进制:") << hex;num = 26;//结果为1aqDebug() << QObject::tr("使用十六进制将整数转换为字符串:")<< QString::number(num, 16);str = "123.456";//结果为123.456qDebug() << QObject::tr("字符串转换为浮点型:") << str.toFloat();str = "abc";// 结果为ABCqDebug() << QObject::tr("转换为大写:") << str.toUpper();str = "ABC";// 结果为abcqDebug() << QObject::tr("转换为小写:") <<str.toLower();int age = 25;QString name = "yafei";// name代替%1,age代替%2str = QString("name is %1, age is %2").arg(name).arg(age);// 结果为name is yafei, age is 25qDebug() << QObject::tr("更改后的str为:") << str;str = "%1 %2";// 结果为%1f helloqDebug() << str.arg("%1f","hello");    // 结果为hellof %2  qDebug() << str.arg("%1f").arg("hello"); str = QString("ni%1").arg("hi",5,'*');//结果为ni***hiqDebug() << QObject::tr("设置字段宽度为5,使用'*'填充:") << str;qreal value = 123.456;str = QString("number: %1").arg(value,0,'f',2);//结果为"number:123.45qDebug() << 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";// 结果为100qDebug() << 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 255qDebug() << "ok: "<< ok << QObject::tr("转换为十六进制:") << hex;num = 26;//结果为1aqDebug() << QObject::tr("使用十六进制将整数转换为字符串:")<< QString::number(num, 16);str = "123.456";//结果为123.456qDebug() << QObject::tr("字符串转换为浮点型:") << str.toFloat();str = "abc";// 结果为ABCqDebug() << QObject::tr("转换为大写:") << str.toUpper();str = "ABC";// 结果为abcqDebug() << QObject::tr("转换为小写:") <<str.toLower();int age = 25;QString name = "yafei";// name代替%1,age代替%2str = QString("name is %1, age is %2").arg(name).arg(age);// 结果为name is yafei, age is 25qDebug() << QObject::tr("更改后的str为:") << str;str = "%1 %2";// 结果为%1f helloqDebug() << str.arg("%1f","hello");    // 结果为hellof %2  qDebug() << str.arg("%1f").arg("hello"); str = QString("ni%1").arg("hi",5,'*');//结果为ni***hiqDebug() << QObject::tr("设置字段宽度为5,使用'*'填充:") << str;qreal value = 123.456;str = QString("number: %1").arg(value,0,'f',2);//结果为"number:123.45qDebug() << QObject::tr("设置小数点位数为两位:") << str;  // 执行下面一行代码,结果为number:123.45不会显示引号qDebug() << QObject::tr("将str转换为const char* :") << qPrintable(str);return a.exec();
}

运行结果:

QT学习笔记(十一):QString类相关推荐

  1. Qt学习笔记之QString

    标准C++提供了 两种字符串.一是C风格的以"\0"祝福语胡额为的字符数组,二是字符串类String.详见<深入浅出之string>. 1. 字符串类QString Q ...

  2. Qt学习笔记——QTime时间类

    QTime 常用函数 QTime currentTime(); <-- 返回系统时间, 但数据类型为QTime 类型,要使用的话需使用toString(const QString &fo ...

  3. Qt学习笔记之 字符串类型小结

    1. Qt常用字符串类型 1.1 QString QString是Unicode编码的字符串,存储一系列16位的QChar,每一个QChar对应一个Unicode 4.0编码的字符,详见<Qt学 ...

  4. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  5. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

  6. QT学习笔记(十四):QLayout的属性介绍

    QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...

  7. QT学习笔记(九):遍历容器-迭代器(iterators)

    QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...

  8. QT学习笔记(八):顺序容器和关联容器

    QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...

  9. QT学习笔记(七):定时器事件的3种常用使用方式

    QT学习笔记(七):定时器事件的2种常用使用方式 Qt中定时器的使用有2种方法:一种是使用QObject类提供的定时器通过重载 timerEvent 事件处理过程函数,一种就是使用QTimer类. 其 ...

最新文章

  1. 关于NameError: name ‘train_test_split‘ is not defined错误提示
  2. Veritas推出全多云环境新技术
  3. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
  4. springboot 双缓存设计与使用
  5. Spring Cloud:服务消费(Ribbon)【Dalston版】
  6. 【问题解决】sql2012安装时卡在正在启动操作系统功能"NetFx3"上不动的解决办法
  7. svpwm的matlab模型,使用simulink进行SVPWM模块的搭建
  8. Android动画之属性动画
  9. excel批量替换不同值(根据多个条件匹配、替换不成功的解决办法)
  10. 手机语言包与国家地区对照表
  11. 平板无线网无法连接网络连接服务器,平板电脑可以连接无线网络但上不了网的解决方法...
  12. 威廉玛丽学院计算机专业好吗,威廉玛丽学院计算机科学研究生最新专业排名
  13. TensorFlow学习笔记(4)——TensorFlow实现GloVe
  14. android 照相机开发
  15. 如何理解 HTML 语义化
  16. matlab函数之bsxfun
  17. [转]800个有趣句子帮你记忆7000个单词
  18. 推荐20个优秀企业技术博客
  19. Android 关于TextView 默认显示英文字母大写问题
  20. ACP敏捷9.敏捷应用场景

热门文章

  1. 【转】RNN、LSTM、Transformer、BERT简介与区别
  2. NLP数据增强方法总结:EDA、BT、MixMatch、UDA
  3. 如果你跟夕小瑶恋爱了...(上)
  4. Hive SQL的编译过程
  5. 史上最全java架构师技能图谱(上)
  6. 论文浅尝 | 基于深度强化学习的远程监督数据集的降噪
  7. 技术动态 | 大规模中文概念图谱CN-Probase正式发布
  8. 使用numpy实现神经网络模块
  9. IO模型(epoll)--详解-01
  10. BUAA_OO_第二单元作业总结