Qt绘图与图形视图之Graphics View坐标系的简单介绍

往期回顾

Qt绘图与图形视图之基本图元绘制的简单介绍-CSDN博客

Qt绘图与图形视图之自定义图元实现拖拽、拉伸、旋转功能-CSDN博客

Qt绘图与图形视图之绘制带三角形箭头的窗口的简单介绍-CSDN博客

 Qt绘图与图形视图之Graphics View坐标系的简单介绍

一、Graphics View坐标系基本概念

Graphics View系统主要有3个坐标系,图形项坐标、场景坐标、视图坐标。

1、场景坐标

场景的坐标一般以场景的中心为原点:

场景是所有图形项的基础坐标,场景坐标(SceneCoordinates)描述了每个顶层图形项的位置。

创建场景时可以定义场景矩形区的坐标范围,例如:

scene = new QGraphicsScene( -400, -300, 800, 600);

这样定义的scene是左上角坐标为(-400,300),宽度为800,高度为600的矩形区域,单位是像素。

2、视图坐标,QGraphicsView

视图坐标与设备坐标相同,是物理坐标,缺省(默认)以左上角为原点;

QGraphicsView视口的左上角坐标总是(0,0),所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射为场景坐标,以便和图形项交互。

3、图形项坐标

图形项坐标是局部逻辑坐标,一般以图件的中心为原点。

图形项使用自己的局部坐标,通常以其中心为(0,0),也是各种坐标变换的中心。

图形项的鼠标事件的坐标是用局部坐标表示的,创建自定义图项,绘制图形项时只需考虑其局部坐标.

一个图形项的位置是其中心点在父坐标系统中的坐标,对于没有父图形项的图形项,父对象就是场景,图形项的位置就是在场景中的坐标。

如果一个图形项还是其他图形项的父项,父项进行坐标变换时,子项也做同样的坐标变换。QGraphicsltem的大多数函数都是在其局部坐标系上操作的。

示例:

例如一个图形项的边界矩形QGraphicsltem::boundingRect()是用局部坐标给出的,但是QGraphicsltem::pos()是仅有的几个例外,它返回的是图形项在父项坐标系中的坐标,如果是顶层图形项,就是在场景中的坐标

4、坐标映射

在场景中操作图形项时,进行场景到图形项、图形项到图形项,或视图到场景之间的坐标变换是比较有用的。

例如在QGraphicsView的视口,上单击鼠标时,通过函QGraphicsView::mapToScene()可以将视图坐标映射为场景坐标,然后用QGraphicsScene::itemAt()函数可以获取场景中鼠标光标处的图形项。


以上就是Qt里Graphics View坐标系的简单介绍。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-03 09:36:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-03 09:36:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-03 09:36:06       87 阅读
  4. Python语言-面向对象

    2024-05-03 09:36:06       96 阅读

热门阅读

  1. Unity功能——开发中逻辑坐标和世界坐标是什么?

    2024-05-03 09:36:06       30 阅读
  2. J2EE模式

    2024-05-03 09:36:06       27 阅读
  3. 企微私域运营软件:构建高效私域流量的利器

    2024-05-03 09:36:06       34 阅读
  4. 代码18-29

    2024-05-03 09:36:06       32 阅读
  5. 银河麒麟记录

    2024-05-03 09:36:06       28 阅读
  6. 对比学习用于分类任务

    2024-05-03 09:36:06       27 阅读
  7. 数据库面试常问

    2024-05-03 09:36:06       37 阅读
  8. OpenCV在计算机视觉中的应用

    2024-05-03 09:36:06       35 阅读