Qt库提供了基于通用模板的容器类, 这些类可用于存储指定类型的数据项,Qt中这些容器类的设计比STL容器更轻,更安全且更易于使用。容器类也都是隐式共的,它们是可重入的,并且已针对速度/低内存消耗和最小的内联代码扩展进行了优化,从而生成了较小的可执行文件。
容器类是基于模板的类,例如常用的QList<T>,T是一个具体的类,可以是int,float等简单类,也可以是QString、QDate类。T必须是一个可赋值的类型,即T必须提供一个默认构造函数,一个可复制的构造函数和一个赋值运算符。Qt的容器分为关联容器类和关联容器类, 顺序容器有:QList,QLinkedList,QVector,QStack和QQueue。
• QList是最适合使用的类型。它是作为数组列表实现的,提供了非常快的前置和追加操作。
• 如果需要一个链表,使用QLinkedList。
• 如果希望项目占据连续的内存位置,请使用QVector。
• QStack和QQueue是提供LIFO和FIFO语义的便捷类。
一,QT数据类型
QT基本数据类型定义在<QtGlobal>头文件中,QT基本数据类型
QT函数和宏定义,申明的宏使程序员能够向其应用程序添加编译器或平台特定的代码,而其他
宏则是用于较大操作的便捷宏, 比如Q_PROCESSOR_ARM,定义是否为ARM处理器编译应用
程序,Qt当前支持可选的ARM版本Q_PROCESSOR_ARM_V5,Q_PROCESSOR_ARM_V6和Q_PROCESSOR_ARM_V7。
返回值 函数 含义
T qAbs(const T &t) 绝对值函数
const T & qMax(const T &a, const T &b) 检索两个给定对象的最大值
const T & qMin(const T &a, const T &b) 检索两个给定对象的最小值
1, QString:
它存储16位Unicode字符,字符串和数值之间的转换:
QString str7 = "56.5";
qDebug()<<str7.toInt();
qDebug()<<str7.toDouble();
qDebug()<<str7.toFloat();
qDebug()<<str7.toLong();
qDebug()<<QString::number(53);
qDebug()<<QString::number(4.4156);
qDebug()<<QString::number(4.4156,'f',2);
QString str8 = "F0F0";
bool OK;
int val = str8.toInt(&OK,16);
qDebug()<<val;
qDebug()<<QString::number(val,2);
qDebug()<<QString::number(val,8);
qDebug()<<QString::number(val,10);
qDebug()<<QString::number(val,16);
8位字符串和Unicode字符串之间转换,以QByteArray的形式返回字符串
qDebug()<<str8.toLocal8Bit();
qDebug()<<str8.toLatin1();
qDebug()<<str8.toUtf8();
toLatin1() 返回 Latin-1(ISO 8859-1)编码的8位字符串。
• toUtf8() 返回UTF-8编码的8位字符串。UTF-8是US-ASCII(ANSI X3.4-1986)的超集,它
通过多字节序列支持整个 Unicode 字符集。
• toLocal8Bit() 使用系统的本地编码返回 8 位字符串。
QString 也提供了 fromLatin1(),fromUtf8() 和 fromLocal8Bit() 对应的转换函数。
字符串的拆分和拼接,除了前面提到的append(),prepend(),insert(),replace()和remove(),indexOf()或lastIndexOf() 以及trimped()和simplified()。
QString字符分割
(1)QString截取一段字符串
在QString中,可以使用mid方法来截取一段指定长度的字符串。mid方法接收两个参数,第一个参数是待截取的字符串的起始位置,第二个参数是待截取字符串的长度。
QString str = "Hello, World!";
QString newStr = str.mid(7, 5); // 从字符串的第7个字符开始,截取5个字符,newStr的值为"World"
也可以不指定第二个参数,则只截取起始位置之后的所有字符。
QString str = "Hello, World!";
QString newStr = str.mid(7); // 从字符串的第7个字符开始,截取之后的所有字符,newStr的值为"World!"
使用left和right方法可以从字符串的左侧或右侧分别截取指定长度的字符串。left方法从左侧开始截取,接收一个参数指定要截取的字符长度。right方法从右侧开始截取,同样接收一个参数指定要截取的字符长度。
QString str = "Hello, World!";
QString newStr1 = str.left(5); // 从字符串的左侧开始,截取5个字符,newStr1的值为"Hello"
QString newStr2 = str.right(6); // 从字符串的右侧开始,截取6个字符,newStr2的值为"World!"
(2)QString字符串替换
QString中提供了replace方法用于字符串替换。replace方法接收两个参数,第一个参数是被替换的字符串,第二个参数是替换后的字符串。
QString str = "Hello, World!";
str.replace("World", "Mars"); //将"World"替换成"Mars",str的值变为"Hello, Mars!"
如果需要在替换前先判断一下字符串中是否包含指定的子串,可以使用contains方法。
QString str = "Hello, World!";
if (str.contains("World"))
{
str.replace("World", "Mars");
}
(3)QString分隔符取数据
QString提供了split方法用于根据指定分隔符对字符串进行分割。split方法接收一个参数,即指定的分隔符,返回一个字符串列表,表示分割后得到的所有子串。
QString str = "apple,banana,pear";
QStringList list=str.split(","); //按","为分隔符分割字符串,list的值为["apple", "banana", "pear"]
split方法还可以接收第二个参数,表示分割后的子串的最大数量。
QString str = "apple,banana,pear";
QStringList list = str.split(",", 2); // 按","为分隔符分割字符串,返回2个子串,list的值为["apple", "banana,pear"]
(4)QString如何截取字符串
除了之前介绍的mid、left和right方法之外,QString还提供了几种截取字符串的方法。
一种是使用remove方法,先删除指定位置及之后的字符,再删除指定位置及之前的字符,即可得到所需的子串。
QString str = "Hello, World!";
str.remove(str.indexOf(','), str.length()); // 删除","及其后的字符
str.remove(0, str.lastIndexOf(' ') + 1); // 删除第一个空格及其前面的字符