Qt中QList用法详解

2023-05-16

QList 列表指针的 释放

1,使用qDeleteAll()

    QList<T*> list;

    qDeleteAll(list);

    list = NULL;

    QList<T*> *listp;

    qDeleteAll(*list);

    listp->clear();

    listp = NULL;

2.通过遍历列表对列表一个一个的释放。

在释放指针的同时把值清空,赋值为BULL 避免野指针。

QList<T *> *qList = new QList<T *>  动态分配内存空间 不使用时需要释放

T *t = new T;

qList->append(t);

           QList<t*>::iterator item = qList->begin();


            while(item != qList->end())  

            {  

                qList->removeOne(*item);  

                T *index = (T*)*item;  

                delete index;  

                index = NULL;  

                item++;  

                qDebug()<< "dhsahdlhlas lish" << qList->length();  

            }  

            qList->clear();  

            qList = NULL;  

/****************************************************************

1、QList是一种表示链表的模板类。

2、QList是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作。

3、QList、QLinkedList和QVector提供的操作极其相似:
* 对大多数操作来说,我们用QList就可以了。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,这是由它们在内存中的存储方式决定的。
* 需要使用QLinkedList的地方:
* 需要使用QVector的地方:元素的储存位置彼此相邻。

4、QList表示为一组指向被存储元素的数组。(例外,如果T本身就是指针类型,或者是size不大于指针类型的基本类型,或者是Qt的共享类,那么QList会直接在指针数组中存储这些元素 。)元素个数小于1000的QList能够很快地实现在链表中间插入操作,以及快速的查找操作。此
外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append()操作都很快。
注意:对于size比指针大的共享类,使用QVector会更好。

5、以下是两个分别存储int型数据和QDate类型数据的链表:
QList intList;
QList dateList;

6、QList以链表形式存储一组元素。默认为空链表,我们可以使用<<操作符添加元素:
QList list;
list << “one” << “two” << “three”; // list: [“one”, “two”, “three”]

7、QList提供了一系列添加、移动、删除元素的操作:insert(), replace(), removeAt(), swap()。此外,它还提供了便于操作的函数:append(), prepend(), removeFirst(), removeLast()。

8、QList与C++中数组的索引方式一样,都是从0开始的。我们可以使用[]操作符来访问位于索引值
处的元素。对于非const链表,操作符[]返回的是该元素的引用,并且返回值可以用途左操作数。
if ( list[0] == “Bob” )
list[0] = “Robert”;
由于QList是以指针数组的形式实现的,该操作能够很快地实现(时间复杂度为常数)。对于只读访问,我们可以用at()函数实现访问:
for ( int i=0; i!=list.size(); ++i )
{
if ( list.at(i) == “Jane” )
{ cout << “Found Jane at position:” << i<< endl;}
}
at()操作比操作符[]更快,因为它不需要深度复制(deep copy)。

9、QList的一个常用操作是,从链表中取出一个元素(元素不再在链表之中),并对该元素进行操作。QList提供了以下操作来实现此功能:
takeAt()、takeFirst()、takeLast()。以下是一个示例:
QList
/*****************************************************************

QList使用总结
概述
一、QList 声明及初始化
1. 声明 QList
2. 初始化 QList
二、QList 基本的 增加、删除、移动、修改
1. 增加节点
2. 删除节点
3. 移动节点
4. 修改节点值
三、QList 定位节点
四、QList 的基本信息
五、QList 迭代器功能
概述
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():节点位置?
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中QList用法详解 的相关文章

随机推荐

  • 控件中的Cliked事件和MouseDown事件执行优先级问题

    MFC中 1 Button控件鼠标事件执行顺序 1 WM LBUTTONDOWN 2 WM LBUTTONUP 3 OnBnClickedButton1 2 Picture Control的鼠标事件执行顺序 1 WM LBUTTONDOWN
  • MFC中手动添加消息处理函数PreTranslateMessage截获按键等消息

    PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的 xff0c 绝大多数本窗体的消息都要通过这里 xff0c 比較经常使用 xff0c 当须要
  • OpenStack核心组件

    OpenStack覆盖了网络 虚拟化 操作系统 服务器等各个方面 它是一个正在开发中的云计算平台项目 xff0c 根据成熟及重要程度的不同 xff0c 被分解成核心项目 孵化项目 xff0c 以及支持项目和相关项目 每个项目都有自己的委员会
  • mfc中钩子的使用

    钩子的安装与卸载 系统是通过调用位于钩子链表最开始处的钩子函数而进行消息拦截处理的 xff0c 因此在设置钩子时要把回调函数放置于钩子链表的链首 xff0c 操作系统会使其首先被调用 由函数SetWindowsHookEx 负责将回调函数放
  • mfc-钩子的使用方法详解

    钩子的安装与卸载 系统是通过调用位于钩子链表最开始处的钩子函数而进行消息拦截处理的 xff0c 因此在设置钩子时要把回调函数放置于钩子链表的链首 xff0c 操作系统会使其首先被调用 由函数SetWindowsHookEx 负责将回调函数放
  • mfc-钩子的使用方法详解

    钩子的安装与卸载 系统是通过调用位于钩子链表最开始处的钩子函数而进行消息拦截处理的 xff0c 因此在设置钩子时要把回调函数放置于钩子链表的链首 xff0c 操作系统会使其首先被调用 由函数SetWindowsHookEx 负责将回调函数放
  • c#中的消息处理函数和vc中的消息处理函数区别

    从vc入门编程的 xff0c 相信大家都很熟悉PreTranslateMessage和WindowProc两个函数 xff0c 前者是预处理windows发给控件的消息 xff0c 后者是处理剩余的控件消息 对于PreTranslateMe
  • c#中怎么截获按钮消息的几种方法实例验证

    public partial class Form2 Form public Form2 InitializeComponent this button1 MouseEnter 43 61 new EventHandler object o
  • QT中连接Mysql数据库及增删改查实例

    QT连接Mysql数据库步骤相对比较麻烦 xff0c 因此写了篇文章将详细过程呈现给大家 xff0c 欢迎大家来评论区指导提问 方法一 直接通过MySQL的驱动加载数据库 示例代码 xff1a xff08 1 xff09 在 pro文件中添
  • mysql 大批量数据优化插入数据速度

    在 MySQL 中 xff0c 向数据表插入数据时 xff0c 索引 唯一性检查 数据大小是影响插入速度的主要因素 本节将介绍优化插入数据速度的几种方法 根据不同情况 xff0c 可以分别进行优化 对于 MyISAM 引擎的表 xff0c
  • qt连接MySql数据库及增删改查示例

    include 34 mainwindow h 34 include 34 ui mainwindow h 34 include 34 QtSql QSqlDatabase 34 include 34 QMessageBox 34 incl
  • QT中拷贝一个项目的ui界面到另一个项目时Ui.h文件时Ui.h文件控件变量错乱问题解决

    qt中赋值另一个项目的ui时可能会产生在UI h的界面文件中控件变量确实或错乱 xff0c 这是可以去另一个项目的UI h文件中赋值全部代码拷贝到错乱的UI h中 xff0c 然后修改 一下 void setupUi QDialog Ins
  • C++中TCP socket传输文件

    在两个文件中都定义文件头和用到的宏 xff1a define MAX SIZE 10 define ONE PAGE 4096 struct FileHead char str 260 int size 在客户端发送接收阶段 xff1a 1
  • 使用Zeromq和protobuf实现的socket通信

    本文介绍使用ZeroMQ 下文简称ZMQ 结合protobuf序列化实现客户端和服务端的通信 在之前的一篇文章中 http blog csdn net cjf wei article details 52894560 介绍了Google的p
  • QT 中多线程实现方法总结

    第一 xff1a 用QtConcurrentRun类 xff0c 适合在另一个线程中运行一个函数 不用继承类 xff0c 很方便 第二 xff1a 用QRunnable和QThreadPool结合 继承QRunnable xff0c 重写r
  • c++TCP socket实时文件传输

    分为服务端和客户端 xff0c 实现文件的传输 好吧确实是有点本末倒置 xff0c 应该先上消息的互传 xff0c 再进行文件的传输 xff0c 这是因为在学习消息的传输时没有找到合适的讲得明白的教程 现在再回头看消息传输 xff0c 其实
  • Qt中遍历文件夹的方法

    关于Qt操作文件夹 文件的知识用途较多 xff0c 比如遍历下一层乃至所有子孙文件 文件夹 xff0c 获取它们的一些信息 xff08 大小 类型 最后更改时间等 xff09 当然 xff0c 也可以进行级联删除 首先看简单的 xff1a
  • qt中在代码中删除界面的槽方法后一定要把定义和声明都删掉否则代码生成器中一直报错

    qt中在代码中删除界面的槽方法后一定要把定义和声明都删掉否则代码生成器中一直报错
  • qt中使用socket套接字做tcp/Udp通信需要配置和引用的文件

    pro中加入 LIBS 43 61 lpthread libwsock32 libws2 32 在头文件中加入 include lt QCoreApplication gt include lt WinSock2 h gt include
  • Qt中QList用法详解

    QList 列表指针的 释放 1 xff0c 使用qDeleteAll QList lt T gt list xff1b qDeleteAll list xff1b list 61 NULL QList lt T gt listp xff1