中山市哪家公司做网站,太仓市住房城乡建设局网站,太原市建设路小学网站,做网站说什么5.0啥意思【Python_GraphicsView 学习笔记#xff08;一#xff09;】Graphics View框架的基本介绍 前言正文1、Graphics View框架简介2、Graphics View框架与QPainter类的区别3、Graphics View框架的三个组成部分4、场景QGraphicsScene类5、视图QGraphicsView类6、图形项QGraphicsIte… 【Python_GraphicsView 学习笔记一】Graphics View框架的基本介绍 前言正文1、Graphics View框架简介2、Graphics View框架与QPainter类的区别3、Graphics View框架的三个组成部分4、场景QGraphicsScene类5、视图QGraphicsView类6、图形项QGraphicsItem类7、Graphics View框架的坐标系统8、参考文章 前言
Qt提供了比较丰富的内置控件可以满足常规的开发如果想要使用自定义控件Qt也提供了QPainter类画出各种各样的控件但如果要绘制大量的控件或者图形并进行相应的控制管理如拖拽、旋转等操作时就会显得力不从心。还好Qt提供了Graphics View框架来对大量的自定义图形项进行管理与交互。
正文
本文中主要介绍什么是Graphics View框架Graphics View框架与QPainter类的区别Graphics View框架的三元素等在学习Graphics View框架的过程中发现Graphics View框架相关的文章都比较零散因此决定将自己最近的学习进行总结记录。
1、Graphics View框架简介
Graphics View框架 是一个基于 item 的 model-view 架构 的框架基于 item 是因为它的每一个组件都是一个 item。 Graphics View框架是一个典型的 model-view 架构Graphics View框架提供了一个model和一个view。model是添加的各种对象view就是观察这些对象的视口或窗口。同一个model可以由很多view从不同的角度进行观察。
2、Graphics View框架与QPainter类的区别
QPainter绘图QPainter 绘图多是采用一种面向过程的描述方式需要在绘图设备的paintEvent()事件里编写绘图的程序实现整个绘图过程适合于绘制复杂性不高的固定图形不能实现图件的选择编辑拖放修改等功能。Graphics View框架Graphics View 架构可以绘制复杂的有大量基本图形元件的图形并且每个图形元件是可选择可拖放和修改的类似于矢量绘图软件的绘图功能。
3、Graphics View框架的三个组成部分
Graphics View架构主要由三个部分组成即场景QGraphicsScene、视图QGraphicsView、图形项QGraphicsItem 其中场景类QGraphicsScene 提供了一个用于管理位于其中的众多图形项QGraphicsItem视图类QGraphicsView 用于显示场景中的图形项QGraphicsItem一个场景可以通过多个视图表现一个场景包括多个图形项。
QGraphicsScene类 提供绘图场景scene场景是不可见的是一个抽象的管理图形项的容器可以向场景添加图形项获取场景中的某个图形项等。QGraphicsView类 提供绘图的视图view组件用于显示场景中的内容可以为一个场景设置几个视图用于对同一个数据集提供不同的视口。QGraphicsItem类 是场景中所有物件的基类GraphicsView也提供了一些标准item例如矩形QGraphicsRectItem椭圆QGraphicsEllipseItem等。
这三个类的关系
注意
场景QGraphicsScene 和里面包含的 图形项QGraphicsItem 作为 model 视图QGraphicsView 作为 viewmodel里面存储了要展示的界面的数据定义 而view根据 model里面的数据进行展示一个model可以对应多个view。
界面的显示关系
4、场景QGraphicsScene类
QGraphicsScene是一个图形项的集合它包括三层背景层background layer, 项层item layer 和前景层foreground layer。 可以通过重新实现drawBackground() drawForeground() 来控制背景层和前景层。 场景QGraphicsScene主要具有如下一些功能
提供管理大量图形项的快速接口将事件传播给每个图形项管理每个图形项的状态例如选择状态焦点状态等管理未经变换的渲染功能主要用于打印。
5、视图QGraphicsView类
QGraphicsView可以为一个场景设置几个视图用于对同一个数据集提供不同的视口。当视图比场景大时会显示场景中的所有内容当视图比场景小时则只能显示场景的一部分内容但是会自动提供卷滚条在整个场景内移动。
6、图形项QGraphicsItem类
QGraphicsItem支持以下的一些操作
处理鼠标按下、移动、释放、双击、悬停、滚轮和右键菜单事件支持键盘输入按键事件处理拖曳事件支持组合可以是父子项关系组合也可以通过QGraphicsItemCroup类进行组合碰撞检测。
7、Graphics View框架的坐标系统
视图坐标与设备坐标相同是物理坐标一般以左上角为原点单位是像素视图的坐标只与widget或者视口有关而与场景无关所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的然后用户需要将这些坐标映射成场景坐标以便程序中交互场景坐标等价于QPainter的逻辑坐标一般以场景的中心为原点单位是像素场景是所有图形项的基础坐标描述了每个顶层图形项的位置图形项坐标局部逻辑坐标一般以图件的中心为原点每个图形项在场景里都有一个位置坐标是由QGraphicsItem::scenePos给出的。
8、参考文章
项目实战4-工控系统前端QT之图形视图框架概述——Graphics View Framework74 QT图形视图框架(Graphics View)Qt Graphics View 框架