QT5图形视图框架

简介: GraphicsView (图形视图)框架结构取代了之前版本中的QCanvas模块,它提 供基于图元的模型/视图编程,类似于QtlnterView的模型/视图结构,只是这里的数据是图形。

QT5图形视图框架


图形视图体系结构

GraphicsView (图形视图)框架结构取代了之前版本中的QCanvas模块,它提 供基于图元的模型/视图编程,类似于QtlnterView的模型/视图结构,只是这里的数据是图形。


GraphicsView 的特点

Graphics View框架结构的主要特点如下。


(1) Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL 工具来改善绘图性能。


(2) Graphics View支持事件传播体系结构,可以使图元在场景(scene)中的 交互能力提高一倍,图元能够处理键盘事件和鼠标事件。其中,鼠标事件包括鼠标 按下、移动、释放和双击,还可以跟踪鼠标的移动。


(3 )在 Graphics View 框架中,通过二元空间划分树(Binary Space Partitioning, BSP)提供快速的图元查找,这样就能够实时地显示包含上百万个 图元的大场景。


Graphics View 的三元素

Graphics View框架结构主要包含三个类,场景类(QGraphicsScene)、视图类 (QGraphicsView)和图元类(QGraphicsItem),统称为"三元素”。其中,场景类提 供了一个用于管理位于其中的众多图元容器,视图类用于显示场景中的图元,一个 场景可以通过多个视图表现,一个场景包括多个几何图形。它们三者之间的关系如 图


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pvQt9T20-1664354665656)(C:\Users\star\Desktop\LearnC++\learn-c\QT应用开发\pic\GraphView三元素.png)]


(1)场景类:QGraphicsScene类


它是一个用于放置图元的容器,本身是不可见的,必须通过与之相连的视图类 来显示及与外界进行互操作。通过QGraphicsScene::addltem()可以添加一个图元到 场景中。图元可以通过多个函数进行检索。QGraphicsScene::items()和一些重载函数 可以返回和点、矩形、多边形或向量路径相交的所有图元。QGraphicsScene::itemAt() 返回指定点的最顶层图元。


场景类主要完成的工作包括,提供对它包含的图元的操作接口和传递事件,管 理各个图元的状态(如选择和焦点处理),提供无变换的绘制功能(如打印)等。


事件传播体系结构将场景事件发送给图元,同时也管理图元之间的事件传播。 如果场景接收到了在某一点的鼠标单击事件,场景会将事件传给在这一点的图元。


管理各个图元的状态(如选择和焦点处理)。可以通过 QGraphicsScene::setSelectionArea()函数选择图元,选择区域可以是任意的形状,使 用QPainterPath表示。若要得到当前选择的图元列表,则可以使用函数 QGraphicsScene::selectedltems()□可以通过 QGraphicsScene:: setFocusItem()函数或 QGraphicsScene::setFocus()函数来设置图元的焦点,获得当前具有焦点的图元使用 函数 QGraphicsScene::focusltem()。


如果需要将场景内容绘制到特定的绘图设备,则可以使用 QGraphicsScene: :render()函数在绘图设备上绘制场景。


(2) 视图类:QGraphicsView 类


它提供一个可视的窗口,用于显示场景中的图元。在同一个场景中可以有多个 视图,也可以为相同的数据集提供几种不同的视图。


QGraphicsView是可滚动的窗口部件,可以提供滚动条来浏览大的场景。如果 需要使用OpenGL ,则可以使用QGraphicsView::setViewport()将视图设置为 QGLWidgeto


视图接收键盘和鼠标的输入事件,并将它们翻译为场景事件(将坐标转换为场 景的坐标)。使用变换矩阵函数QGraphicsView::matrix()可以变换场景的坐标,实现 场景缩放和旋转。QGraphicsView 提供 QGraphicsView::mapToScene()和 QGraphicsView:: mapFromScene()用于与场景的坐标进行转换。


(3)图元类:QGraphicsItem 类


它是场景中各个图元的基类,在它的基础上可以继承出各种图元类,Qt已经预 置的包括直线(QGraphicsLineltem )、椭圆(QGraphicsEllipseltem )、文本图元 (QGraphicsTextltem)> 矩形(QGraphicsRectltem)等。当然,也可以在 QGraphicsItem 类的基础上实现自定义的图元类,即用户可以继承QGraphicsItem实现符合自己需 要的图元。


QGraphicsItem主要有以下几点功能。


•处理鼠标按下、移动、释放、双击、悬停、滚轮和右键菜单事件。


•处理键盘输入事件。


•处理拖曳事件。


•分组。


•碰撞检测。


此外,图元有自己的坐标系统,也提供场景和图元。图元还可以通过 QGraphicsItem:: matrix()来进行自身的交换,可以包含子图元。


Graphics View 的坐标系统


1.场景坐标

场景坐标是所有图元的基础坐标系统。场景坐标系统描述了顶层的图元,每个 图元都有场景坐标和相应的包容框。场景坐标的原点在场景中心,坐标原点是X轴 正方向向右,y轴正方向向下。


2.视图坐标

视图坐标是窗口部件的坐标。视图坐标的单位是像素。QGraphicsView视图的 左上角是(0,0), X轴正方向向右,丫轴正方向向下。所有的鼠标事件最开始都是 使用视图坐标。


QGraphicsView类继承自QWidget类,因此它与其他的QWidget类一样,以窗 口的左上角作为自己坐标系的原点。


3.视图坐标

视图坐标是窗口部件的坐标。视图坐标的单位是像素。QGraphicsView视图的 左上角是(0,0), X轴正方向向右,丫轴正方向向下。所有的鼠标事件最开始都是 使用视图坐标。


QGraphicsView类继承自QWidget类,因此它与其他的QWidget类一样,以窗 口的左上角作为自己坐标系的原点。


根据需要,Qt提供了这三个坐标系之间的互相转换函数,以及图元与图元之间 的转换函数,若需从QGraphicsItem坐标系中的某一点坐标转换到场景中的坐标, 则可调用QGraphicsItem的mapToScene()函数进行映射。而QGraphicsItem的 mapToParent()函数则可将QGraphicsItem坐标系中的某点坐标映射至它的上一级坐 标系中,有可能是场景坐标,也有可能是另一个QGraphicsItem坐标。


Graphics View框架提供了多种坐标变换函数

映射函数 转换类型
QGraphicsView: :mapToScene() 视图到场景
QGraphicsView: :mapFromScene() 场景到视图
QGraphicsItem:: mapFromScene() 场景到图元
QGraphicsItem:: mapToScene() 图元到场景
QGraphicsItem:: mapToParent() 子图元到父图元
QGraphicsItem:: mapFromParent() 父图元到子图元
QGraphicsItem:: mapToItem() 本图元到其他图元
QGraphicsItem:: mapFromItem() 其他图元到本图元

QT日常专栏会使用一个例子详细介绍该模块。请关注QT日常专栏更新状态

目录
相关文章
|
1月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
18 0
|
1月前
|
数据可视化 图形学 开发者
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
160 4
|
3天前
|
开发框架 自然语言处理 Linux
Qt:构建强大跨平台应用程序的框架
Qt:构建强大跨平台应用程序的框架
|
1月前
|
算法 API C++
Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景
Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景
133 0
|
1月前
|
编解码 供应链 开发工具
英飞凌采用Qt图形解决方案增强Traveo T2G MCU系列,实现智能渲染技术
在竞争激烈的全球半导体市场,制造商一直在努力缩短产品上市时间。同时,他们对流畅、高分辨率图形显示器的需求也在日益增长。
|
4月前
|
存储 数据可视化 测试技术
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
155 0
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
38 8
C++ Qt开发:QTcpSocket网络通信组件
|
3天前
|
开发框架 数据可视化 编译器
Qt的魅力:探索跨平台图形界面开发之旅
Qt的魅力:探索跨平台图形界面开发之旅
10 1
|
18天前
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
37 0
|
26天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存

热门文章

最新文章

推荐镜像

更多