QGraphicsScene和QGraphicsView坐标系统

发布时间 2023-09-07 23:43:39作者: imxiangzi

 

Graphics View中有三个坐标系统,即场景坐标、视图坐标、图形项坐标。

场景坐标
场景坐标等价于QPainter的逻辑坐标,一般以场景中心为原点;视图坐标与设备坐标相同,是物理坐标,默认为左上角为原点;图形项的坐标是局部逻辑坐标,一般以图形项的中心为原点。

一个图形项的位置是其中心点在父坐标中的坐标,对于没有父图形项的图形项,其父对象就是场景,图形项的位置就是在场景中的坐标。如果一个图形项还是其他图形项的父项,那么父项进行坐标转换的时候,子项也做同样的坐标转换。

视图坐标
视图坐标就是窗口界面的物理坐标,单位是像素。视图坐标只与widget或视口有关,而与观察的场景无关,左上角坐标为(0,0)

场景坐标
场景是所有图形项的基础坐标,场景坐标描述了每个顶层图形项的位置,创建场景时可以定义矩形区域的坐标范围。

_scene = new QGraphicsScene(-100, -100, 200, 200);
1
这样就定义了一个左上角坐标为(-100,-100)宽度为200,高度为200 的矩形区域,单位是像素

QGraphicsView是用于观察一个场景的物理窗口,当场景小于视图时,整个场景在视图中可见;当场景大于视图时,视图自动提供滚条。

示例代码:

ui.graphicsView->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
_scene = new QGraphicsScene(-100, -100, 200, 200);
ui.graphicsView->setScene(_scene);

QPen pen;
pen.setWidth(2);
pen.setColor(QColor(255, 0, 0));

_scene->setBackgroundBrush(QBrush(Qt::gray));

_scene->addLine(-100, 0, 100, 0, pen);
_scene->addLine(0, -100, 0, 100, pen);
_scene->addEllipse(-25, -25, 50, 50, pen);
1
2
3
4
5
6
7
8
9
10
11
12
13

————————————————
版权声明:本文为CSDN博主「wb175208」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wb175208/article/details/106484256

 

from: https://blog.csdn.net/wb175208/article/details/106484256