1、字符串类(QString类)
QString 存储字符串釆用的是16位 Unicode 码,每一个字符是一个 16 位的 QChar,而不是 8 位的 char,所以 QString 处理中文字符没有问题,而且一个汉字算作是一个字符。
QString在一个连续的内存块中保存字符串数据,当字符串的长度不断增长时,QString需要重新分配内存空间,以便足够的空间保存增加的字符串。
(1)操作字符串
字符串的追加:
QString str1="welcome ";
str1 =str1+"to you!";
ui->radiusLineEdit_2->setText(str1);
方法二:使用 append()函数
QString str1="welcome ";
QString str2="to you!";
str1.append(str2);
ui->radiusLineEdit_2->setText(str1);
QString其他的一些组合字符串方式:
insert():在原字符串特定的位置插入另一个字符串。
prepend():在原字符串的开头插入另一个字符串。
replace():用指定的字符串代替原字符串中的某些字符。
(2)查询字符串
//判断一个字符串是否一个某个字符串开头
QString str1="welcome to you!";
str1.startsWith("welcome",Qt::CaseSensitive);//第一个参数指定了一个字符串;第二个参数指定是否大小写敏感 返回true
//判断一个字符串是否一个某个字符串结尾
QString str1="welcome to you!";
str1.endsWith("welcome",Qt::CaseSensitive);//第一个参数指定了一个字符串;第二个参数指定是否大小写敏感 (默认大小写敏感) 返回true
(3)字符串的转换数值
QString提供了丰富的转换函数,可以将一个字符串转换为数值类型或其他类型字符编码集。
QString str1="125";
bool ok;
int hex=str1.toInt(&ok,16);//ok=true;hex=293 第一个参数是bool类型的指针,用于返回准换的状态,转换成功设置为true
//第二个参数指定了转换的基数
int dec=str1.toInt(&ok,10);//ok=true;dec=10
(4)数值转换成字符串
int num=125;
QString str=QString::number(num,10);//int转字符串
ui->radiusLineEdit_2->setText(str);
2、容器类
Qt提供了一组通用的基于模板的容器类。存在在Qt容器中的数据必须是可赋值的数据类型,这样的数据包含了通常使用的大多数数据类型。
Qt不仅支持C++的STL模板库,同时自己也定义了一套容器类和与之操作的算法类,使用Qt定义的这一套库,可以使在各个平台的表现相同。Qt的这些容器被设计为更轻便,更安全和更容易使用。容器类是隐含共享(implicitly)的,可重入(reentrant)的和线程安全的。为容器遍历提供了两种迭代器(java-style,STL-style),并且Qt提供了foreach关键字,更加方便元素遍历。
(1)QList<T>
- 这是最通用的一个容器类。它里面存储了给定类型T的一个列表,这个列表可以使用下标来访问。其实,在底层QList被实现为一个数组
- 确保基于下标的访问非常快速。可以使用QList::append()和QList::prepend()向链表的两端添加元素,或者使用QList::insert()在链表的中间插入元素
- ,和其他容器相比,更重要的是,QList在可执行文件中展开的代码量是非常少的,是经过高度优化的。QStringList就继承自QList<QString>。
(2)QLinkedList<T>
- 这个容器类类似于QList,只能使用迭代器来访问它的数据项,而不能使用下标。当从中间插入时,它的效率比QList还要高。并且,它有更好的迭代器语义。
- 即指向QLinkedList中某个元素的迭代器,只有该元素存在就会一直保持有效,而指向QList中某元素的迭代器,在向QList进行任意插入或删除时都会导致该迭代器失效。
- QLinkedList<T>是一个链式列表,以非连续的内存块保存数据。
(3)QVector<T>
- QVector<T>在相邻的内存中存储给定数据类型T的一组数值。在一个QVector<T>的前部或者中间位置插入操作是很慢的,这样的操作可以导致存储中的大量数据移动。
- QVector<T>既可以使用下标访问数据项,也可以使用迭代器访问数据项。
3、迭代器:
迭代和遍历的区别:
- 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
- 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
迭代器为访问容器类里的数据项提供了统一的方法,Qt 有两种迭代器类:Java 类型的迭代器和 STL 类型的迭代器。
两者比较,Java 类型的迭代器更易于使用,且提供一些高级功能,而 STL 类型的迭代器效率更高。