概述

QList是Qt的泛型容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问以及基于索引的插入和删除。
QList、QLinkedList 和 QVector 提供了类似的 API 和功能。它们通常是可互换的,但性能有所区别。

  • QVector 应该是默认首选的容器
  • QList是最广泛用于Qt API中传递值的容器
  • QList不是指针结构体类型的链表,真正的结构体指针链表是 QLinkedList

一、QList 声明及初始化

QList可以保存基本数据类型的,如int,double,bool等;但是在存储QObject对象及其子类对象时,不能直接存对象本身,而是只能存对象的地址;

1. 声明 QList

声明简单:

//基本数据类型
QList<int> integerList;
QList<QDate> dateList;

//存储QObject对象的地址
QList <QWidget *> ptr_widgets;
QList <QObject *> ptr_objects;

2. 初始化 QList

初始化也很简单;若没初始化,链表默认为空的。

QList<QString> list = { "one", "two", "three" };

QWidget * widget1 = new QWidget();
QWidget * widget2 = new QWidget();
QList<QWidget *> ptr_widgets = {widget1, widget2};

二、QList 基本的 增加、删除、移动、修改

QList 在有些实现都是需要多个基本操作组合来实现的,不同的实现用的方法也不一致,Qt提供的都是最核心、最单一的功能。

1. 增加节点

  • insert():插入节点到
  • append():尾部添加节点
  • prepend() :头部添加节点
  • operator <<():尾部添加节点或链表
  • operator+=():尾部添加节点

2. 删除节点

  • removeAt():删除节点
  • removeFirst():删除头节点
  • removeLast():删除尾节点

3. 移动节点

  • move():链表内移动节点位置
  • swap():俩个链表交换值(其实交换一下地址映射就能实现)

4. 修改节点值

  • replace():替换链表内的节点值

三、QList 定位节点

QList是有序的链表,可以通过索引来得到

  • operator [ ] 数组索引符:这个和普通数组一样的使用 [ ] 访问下标方法一致
  • at() 函数:也是通过索引值,也即是下标方式

Qt 推荐使用at()函数,这样的效率更好,因为 at()函数不会发生 深拷贝 ,而另外一种方式会。

QList还提供了一些快捷的 索引 + 返回索引节点 + 删除原索引节点,也就是组合的功能;但是这个是 take…不是get…这样的,这就意味着,这个其实是✂剪掉一个节点,并返回

  • takeAt():取得在指定位置的节点
  • takeFirst():取得头节点 ;等价【takeAt(0)】
  • takeLast():取得尾节点

四、QList 的基本信息

  • contains():是否包含节点xxx
  • count():对指定节点值计数
  • isEmpty():链表为空?
  • size():链表大小?
  • indexOf():节点位置?

等等。。。常用功能

但是有些功能就需要组合一下就行
其他功能还需要看帮助文档

五、QList 迭代器功能

有两种迭代器的风格

  • Java style
  • STL style

区别确实有,但是不大;
官方说的性能来看:STL风格的更强大;毕竟能融入算法模块;
但Java的风格更加人性化,更容易使用些,性能也不差,平常代码完全能胜任了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐