Qt数据结构与编码技巧全解析

文章目录

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()会将最小的占位符替换掉

如果是两个一样且最小都会一并替换掉

多次调用多于占位符的个数,会报错。

cpp 复制代码
// 格式化构造字符串
    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");

数值转化为字符串

cpp 复制代码
    int i = 1234;
    QString str = QString("%1").arg(i); //数字转化为字符串 atoi std::to_string
    qDebug() << str;

字符串转成数值

增加

删除

查找

根据位置找内容

back() 找最后一个

front() 找第一个

根据内容找位置

特色功能

提取子串

从左边开始提取

从右边开始提取

从指定位置提取

切割

按照 什么切割。

QString:: SkipEmptyParts 不包含空字符串

切完会返回一个QStringList 类型,相当于 vector

需求切割字符串,并存储到map中?

容器

序列容器的接口

这三种容器的函数接口都相同,了解一个其他自然会。

QList构造函数

支持列表初始化

增加

<< 支持链式调用

cpp 复制代码
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 判断是否存在