Qt的容器类——概述

1 Qt的容器类

  • Qt提供了多个基于模板的容器类,用于存储指定类型的数据项。
  • Qt的容器类比STL中的要轻巧、安全,它们是隐式共享可重入的,并进行了速度和存储优化,另外它们是线程安全的。
  • 线程安全:作为只读容器时可以被多个线程同时访问。
  • 隐式共享:是一种对象的管理方法,一个对象被隐式共享只是传递该对象的一个指针给使用者,而不复制实际的对象数据,只有在使用者修改数据时,才实际复制共享对象给使用者。
  • 可重入:函数发生中断(跳转),当中断返回时,原先的函数能够正确继续执行。
  • 容器存储的类型必须为一个可赋值的类型T,即T必须定义了一个缺省构造函数,一个复制构造函数和一个赋值运算符。
  • Qt的容器类分为顺序容器关联容器
  • 容器迭代器用于遍历容器中的数据项,有Java类型的迭代器STL类型的迭代器两种,另外还有foreach宏用于遍历容器中的数据项。

2 顺序容器

  • QList,以数组列表的形式实现。QList的介绍
  • QLinkedList,是链式列表,数据存储不连续。
  • QVector,是动态数组,数据项连续存储。
  • QStack,类似堆栈,LIFO。
  • QQueue,类似队列,FIFO。

3 关联容器

  • QSet,基于散列表QHash的集合模板类,存储数据顺序不定,是个集合
  • QMap,提供字典功能(关联数组),创建键值对,一个键只能映射一个值,按照键的顺序存储数据。 QMap的介绍
  • QMultiMap,提供多值映射,创建键值对,一个键可以对应多个值
  • QHash,基于散列表实现字典功能,创建键值对,一个键只能映射一个值,数据任意顺序存储。
  • QMultiHash,提供多值映射,创建键值对,一个键可以对应多个值
### Qt 框架中的类关系 #### Qt 图形视图框架概述 Qt 的图形视图框架由多个核心组件构成,这些组件共同协作来实现复杂的二维图形界面。该框架主要围绕三个基本元素展开:场景(QGraphicsScene)、视图(QGraphicsView) 和 图元 (QGraphicsItem)[^2]。 #### 场景类:`QGraphicsScene` 作为模型部分, `QGraphicsScene` 负责管理和存储所有的图元对象以及处理它们之间发生的事件。它提供了用于添加、移除和查询图元的方法,并维护着一个矩形区域内的所有项列表。此区域内可以容纳大量项目而不会影响性能[^2]。 #### 视图类:`QGraphicsView` 负责提供窗口部件以可视化展示来自关联的 `QGraphicsScene` 中的内容。通过不同的变换矩阵支持缩放和平移操作,允许用户浏览整个或部分内容。此外还实现了滚动条和其他导航特性以便于交互式探索大尺寸场景。 #### 图元类:`QGraphicsItem` 这是所有可绘制项目的基类,在其中定义了通用接口供派生子类重写从而创建特定类型的视觉元素如线条、多边形或者自定义形状等。每个实例都拥有自己独立的位置属性并能响应鼠标点击、键盘输入等多种外部刺激源。 #### 特殊化图表组件 对于更专业的绘图需求,则有专门设计用来呈现统计信息或其他形式的数据集合——即所谓的“图表”。在这个领域里,`QChart` 是一个非常重要的角色;它是基于上述提到的基础架构之上构建起来的一个高级别的 API 。作为一个直接继承自 `QGraphicsWidget` 的类,`QChart` 不仅能够很好地融入到现有的图形视图体系当中去,而且还额外引入了一些针对数据可视化的特性和功能,比如自动调整大小适应容器空间变化的能力等等[^1]。 ```cpp // 创建一个新的 QChart 对象 QChart *chart = new QChart(); ``` 为了方便开发者快速搭建应用界面,还有一个名为 `QChartView` 的控件被开发出来。这个类实际上就是对标准 `QGraphicsView` 进行了一定程度上的封装扩展而成的结果,使得我们可以更加轻松便捷地将之前所讨论过的那些复杂而又强大的图表渲染能力集成进来。 ```cpp // 使用 QChartView 来显示图表 QChartView *chartView = new QChartView(chart); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值