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();
}
运行结果: