3.1.5.Qt容器大家族(1):QList——最常用的顺序容器 1.前续故事好久不见啦我也是期末考试和GESP6级考完了暑假来啦这会可真是旗开得胜呢Qt魔法之旅的暑假篇即将开启接下来你们将会遇见更多的Qt朋友们再次见识Qt的厉害废话不多说直接进入正题。2.内容介绍上节课我们讲解了QDate、QTime和QDateTime这三剑客他们能存储时间和日历。而从这节课开始我们要学习好几个能容器类他们是我们Qt开发中最基础的几个类你们是不是迫不及待了呢那就快点开始吧3.什么是容器简单来说呢顾名思义容器就是用来存储数据的类就像是我们平常的箱子、水杯这样的。而C标准库中就有STL库比如vector、set等他们就是C标准库的容器。而Qt呢它其实也有一套容器类而且和C标准库很相似。今天我们就先来讲QList。4.讲解QListQList嘛它是Qt容器类中最简单、最常用的一个它和标准库中的vector很类似也是用来存储一个动态列表的随机访问速度快。它的创建方式和vector差不多也是QList类型这样定义的。//创建一个int类型的列表 QListint l;那么我们该如何在列表中添加元素呢这里有两种方法第一种是用append函数来在列表末尾添加元素或者是用prepend函数来在列表开头添加元素。第二种使用QList重载的运算符来添加用重载运算符可以一次性添加好几个元素。//第一种函数 l.append(1); //在末尾添加1 l.prepend(2); //在开头添加2 //第二种重载运算符 l 1 2 3 4 5; //一次性添加完1、2、3、4、5或者如果我们要直接初始化这个列表可以直接用大括号来赋值非常方便。只在末尾添加、开头添加肯定不够肯定还要插入。这时我们就要用insert函数它有两个参数第一个是要插入的下标第二个是要插入的数。l.insert(2, 50);QListint l {1, 2, 3, 4, 5};既然有了添加元素那么肯定要有删除元素、访问元素。接下来我就来讲解如何删除元素。删除元素的函数有很多首先就是我们最常见的removeAt函数里面传的是一个下标表示要删除的元素的下标。还有如果我们就只想删除最前面的或者最后面的就可以用removeFirst和removeLast来删除第一个和结尾的元素。l.removeAt(2); //删除下标为2的元素 l.removeFirst(); //删除第一个 l.removeLast(); //删除最后一个那我们要如何删除一个匹配的值呢这时我们就可以用removeOne这个函数会删除第一个匹配的值。还有removeAll可以删除所有匹配的值。l.removeOne(1); //删除第一个1 l.removeAll(2); //删除所有的2如果要清空整个数组那么用clear函数就搞定了不用任何参数。最后就是查询了。如何知道这个列表的长度那就用size函数。怎么判断列表是否是空荡荡的呢用isEmpty就能判断。qDebug() l.size(); //输出列表长度 qDebug() l.isEmpty(); //输出是否为空我们要如何访问第几个下标的元素是多少呢最简单的方法就是用中括号里面填写下标和普通数组、vector是一样的。还有一种方法就是at函数at函数更安全出现越界访问时会抛出异常让你知道异常之处在哪里。int a l[2]; //中括号访问下标为2的元素 int b l.at(2); //更安全的访问方法当然这里也有first和last能返回第一个元素和最后一个元素。还有一个很实用的操作——查找。用indexOf可以知道一个元素第一次出现的下标。contains函数可以判断一个元素是否存在。qDebug() l.indexOf(3); //输出3第一次出现的位置 qDebug() l.contains(5); //输出5是否存在最后如果你想遍历整个列表可以用三种方式第一种就是普通的下标访问第二种是用C11的范围for更简洁最后一种就是迭代器迭代器是一个指针所以要解引用。我们最常用的就是第二种最方便。// 方式一下标遍历 for (int i 0; i l.size(); i) qDebug() l[i]; // 方式二范围for推荐最简洁 for (int val : l) qDebug() val; // 方式三迭代器 for (auto it l.begin(); it ! l.end(); it) qDebug() *it;好了QList的基本操作就讲到这里。我们下节课再见拜拜

相关新闻

最新新闻

PID控制器在Simulink中的高级配置与抗饱和策略

PID控制器在Simulink中的高级配置与抗饱和策略

1. PID控制器基础与Simulink实现要点在工业控制领域,PID控制器就像老司机的驾驶经验——比例环节(P)负责快速响应方向盘转动,积分环节(I)自动修正长期跑偏,微分环节(D)预…

2026/7/15 6:04:02
C++与OpenCV实战:运动目标检测与跟踪系统开发指南

C++与OpenCV实战:运动目标检测与跟踪系统开发指南

1. 项目概述与核心价值最近在整理硬盘,翻出来一个几年前做的老项目,一个基于C和OpenCV的运动目标检测与跟踪系统。当时是为了一个智能监控的POC(概念验证)做的,虽然技术栈不算新潮,但里面涉及到的从图像预处…

2026/7/15 6:04:02
不会写 Prompt?我天天靠精确指令驱动 Claude Code 跑流水线,把这套万能公式掏给你

不会写 Prompt?我天天靠精确指令驱动 Claude Code 跑流水线,把这套万能公式掏给你

先说一个我观察了很久的现象。很多人用 ChatGPT、豆包、DeepSeek,用着用着就放弃了,理由出奇地一致:「这玩意儿答非所问,还不如我自己写。」我去翻他们的对话记录,发现问题压根不在 AI 笨,在那句话本身。他…

2026/7/15 6:04:02
Python实现Minecraft多人游戏:从网络通信到分布式状态同步

Python实现Minecraft多人游戏:从网络通信到分布式状态同步

1. 项目概述:从单机方块到多人世界如果你玩过Minecraft,一定体验过独自挖矿、建造的乐趣,但你是否想过,如果能和朋友一起在同一个世界里冒险、建造,乐趣会不会翻倍?这就是多人游戏的魅力。今天,…

2026/7/15 6:04:01
告别杂乱格式困扰,Gemini 输出的内容粘贴有符号好烦交给 AI 导出鸭

告别杂乱格式困扰,Gemini 输出的内容粘贴有符号好烦交给 AI 导出鸭

Gemini输出的内容粘贴有符号好烦,AI 导出鸭一键清理优化高效排版AI 导出鸭实用妙招:Gemini输出的内容粘贴有符号好烦轻松化解告别杂乱格式困扰,Gemini输出的内容粘贴有符号好烦交给AI 导出鸭 引言 如今越来越多办公人群、文案创作者、学习研究…

2026/7/15 6:04:01
基于 Pnpm Workspace 与 Vite 搭建 Vue 3 企业级 Monorepo 项目

基于 Pnpm Workspace 与 Vite 搭建 Vue 3 企业级 Monorepo 项目

1. 为什么选择 Pnpm Vite Vue 3 组合?在开始搭建企业级 Monorepo 项目之前,我们需要理解为什么这个技术组合如此受欢迎。Pnpm 作为包管理工具,相比传统的 npm 和 yarn 有着明显的优势。它通过硬链接和符号链接的方式共享依赖,不…

2026/7/15 5:59:01

月新闻