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的容器类是可以做嵌套的,例如

QHash<QString,QList<double> > 

格式是需要注意的。

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

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

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

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

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

只能查,不能增删补

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

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

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

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

QMap<Key,T>提供了一个从类型为Key的键到类型为T的值的映射
支持一键多值情况。
QHash<Key,T> 推荐使用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类型的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值