Qt数据结构与编码技巧全解析
文章目录
- Qt中的数据结构
- QDebug
- qDebug函数
- QT的内置类型一般都会重载 << 运算符
- QT的几何规则
- QString 字符串
- 编码
- 变长 VS 定长
- QString 适合中转数据吗?
- Qstring 的底层使用写时复制
- QString的具体使用
- QString 的构造函数
- 格式化构造
- 数值转化为字符串
- 字符串转成数值
- 增加
- 删除
- 查找
- 根据位置找内容
- 根据内容找位置
- 特色功能
- 提取子串
- 切割
- 容器
- 序列容器的接口
- QList构造函数
- 增加
- 删除
- 查
- 根据位置查元素
- 根据元素查位置
- QQueue是QList的子类
- QStack是Qvector的子类
- 关联式容器
- QSet 键的集合
- QMap
Qt中的数据结构
QDebug
取代 std::cout / std :: cerr
qDebug函数
既可以当做printf 来用,也可以当做cout 来用
与他们的区别就是自动换行
QT的内置类型一般都会重载 << 运算符
QT的几何规则
计算机世界的矩形
与坐标系平行
所以知道矩形的左上顶点,高和宽就可以了
Qpoint(点)
QLine(线)
QRect(面)
QString 字符串
std:: string 功能很弱:所以在大多数时候可以看做vector
- 编码模式(乱码问题)
- split(不支持)
编码
变长 VS 定长
QString str3(“hello中国”);// 实际上底层会调用QString fromUtf8
不管编码是什么格式都要转化为utf-16 编码
QString 适合中转数据吗?
不适合,因为QString是在真值不变的情况下,改变编码,会将原来的数据改掉。
buf read(fd, buf…) write(fd, buf…)
Qstring 的底层使用写时复制
QString的具体使用
先弄清楚业务上需要什么东西,再了解具体的接口和函数
构造函数
增
删
查询
修改
特色功能
QString 的构造函数
还可以使用工厂模式来构造对象
格式化构造
调用arg()会将最小的占位符替换掉
如果是两个一样且最小都会一并替换掉
多次调用多于占位符的个数,会报错。
// 格式化构造字符串QString pattern = "I am %1. I am %2 years old!";qDebug() << pattern.arg("caixukun"); //会将最小的占位符替换掉qDebug() << pattern.arg("caixukun").arg("26");qDebug() << pattern.arg("caixukun").arg("26").arg("27");QString pattern2 = "I am %1. I am %1 years old!";qDebug() << pattern2.arg("caixukun");
数值转化为字符串
int i = 1234;QString str = QString("%1").arg(i); //数字转化为字符串 atoi std::to_stringqDebug() << str;
字符串转成数值
增加
删除
查找
根据位置找内容
back() 找最后一个
front() 找第一个
根据内容找位置
特色功能
提取子串
从左边开始提取
从右边开始提取
从指定位置提取
切割
按照 什么切割。
QString:: SkipEmptyParts 不包含空字符串
切完会返回一个QStringList 类型,相当于 vector
需求切割字符串,并存储到map中?
容器
序列容器的接口
这三种容器的函数接口都相同,了解一个其他自然会。
QList构造函数
支持列表初始化
增加
<< 支持链式调用
Qlist Mylist = {1, 3, 5}; Mylist << 7 << 9;
删除
查
根据位置查元素
operator[]
at()
在c++中,[]不会做边界检查,at()会做边界检查
在Qt中,[]也会做边界检查
根据元素查位置
indexof () 从左往右查
lastIndexOf 从右往左查
contains 是否包含
count 有几个
QQueue是QList的子类
QStack是Qvector的子类
关联式容器
QSet 键的集合
QMap
operator[] 和 insert 可以增,和修改
remove 用来删除
contains 判断是否存在