Qt5模板库、工具类读书笔记

【2.1字符串类】
C++提供了两种字符串:(1)C语言风格 “\0”字符结尾的字符数组
(2)字符串类QString 功能更强大,16位Unicode值
操作字符串:
常用这种:方便的字符串组合方式,使用QString::arg()函数,推荐就使用这种方法:
例如:

QString Str;
Str = QString("%1 was born in %2.").arg("John").arg("1998");//str = "John was born in 1998."

为了简化代码可读性,建议采用这种格式进行整理。

Str = QString("%1 was born in %2.")
                .arg("John")
                .arg("1998");

一些QT组合字符串的方法:
(1)insert()函数 (2)prepend()函数 (3)replace()函数
(4)去掉字符串两端的空白(空白字符包括:回车字符“\n”,换行字符“\r”,制表字符”\t”,空格字符”“)
QString::trimmed()函数
QString::simplified()函数
2.1.2 查询字符串类
(1)QString::startWith() (2)QString::endWith() (3)QString::contains()
(4)
2.1.3 字符串的转换
(1)QString::toInt()函数将字符串转换为整型数值,两个参数
第一个参数是:bool类型的指针,用于返回转换状态
第二个参数是:是转换的基数:0表示将采用C语言转换法 0X开头,则基数为16,若字符串以0开头,则基数为8
(2)QString提供的字符串编码集的转换函数将会返回一个const char*类型版本的QByteArray,即构造函数QByteArray(const char*)构造的QByteArray对象
QByteArray类具有一个字节数组,他即可以存储原始字节(raw bytes)
也可以存储”\0”结尾的8位字符串。尽量使用QbyteArray,支持隐式共享
(1)toAscii() (2)toLatin1() (3)toUtf8() (4)toLocal8Bit()
注意NULL字符串和(empty)空字符串的区别:
【2.2容器类】
QT提供了一组通过基于模板的容器类。
Qt的QObject及其他子类(如QWidget和QDialog等)是不能够存储到容器中的:
例如

QList<QToolBar>list;

上述代码是无法通过编译,因为这些类(QObject及其他的子类)没有复制构造函数和赋值操作运算符
一个可替代的方案是存储QObject及其子类的指针,例如:

QList<QToolBar*>list;

Qt的容器类是可以做嵌套的,例如

QHashdouble> > 

格式是需要注意的。

QT的容器类为遍历其中的内容提供了一下两种的方法:
(1)Java风格的迭代器
(2)STL风格的迭代器(STL-style iterators)
2.2.1 QList类、QLinkedList类和QVector类

1.QList维护了一个指针数组,该数组存储的指针指向QList存储的列表项内容
QList提供了基于下标的快速访问。
对于不同类型的数据类型:QList采取不同的存储策略
(1)如果T是一个指针类型的或者指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同)
QList会有数值直接存储在他的数组中
(2)如果QList存储对象的指针,则该指针指向实际存储对象。

JAVA风格迭代器遍历容器
遍历分为只读遍历和读写遍历
这两句非常重要

QList<int>list;//创建一个QList栈对象

QListIteratori(list):以该list参数初始化一个QListIterator对象i,此时迭代点处在第一个列表项“1”的前面(注意,并不是指向该列表项)

只能查,不能增删补

QList<int>list;   //创建一个空的列表list
QMutableListIterator<int> i(list);  //创建上述列表的读写迭代器

STL风格迭代器遍历容器
STL风格迭代器的API是建立在指针操作的基础上,例如,“++”操作运算符移动到迭代器到下一个项(item)
而“*”操作运算符返回迭代器指向的项

QListlist;//初始化一个空的QList列表
QList::iterator i;//初始化一个QList::iterator读写迭代器
QList::const_iterator ci;//初始化一个QList::iterator读写迭代器

QMap类和QHash类
说几点区别:
QHash具有比QMap更快的查找速度
QHash以任意的顺序存储速度,QMap总按照键Key的顺序存储数据
QHash的键类型Key必须提供一个operator==()和一个全局的qHash(Key)函数
QMap的键类型Key必须提供operator<()函数

QMap提供了一个从类型为Key的键到类型为T的值的映射
支持一键多值情况。
QHash 推荐使用QHash作为存放数据的容器
Java风格迭代器分为两种:只读迭代器类和读写迭代器类

QMap<QString,QString>map;//创建一个QMap栈对象
QMapIterator<QString,QString>i(map);//创建一个只读迭代器。
QMutableMapIterator<QString,QString>modi(map);//创建一个读写迭代器

STL风格迭代器器遍历容器

QMap<QString,QString>map;//创建一个QMap栈对象
QMap<QString,QString>::iterator mi;
QMap<QString,QString>::const_iterator modi;

QVariant类
QVariant类类似于C++的联合(union)数据类型,它不仅能够保存很多Qt类型的值。

你可能感兴趣的:(QT学习笔记)