Graphics View中有三个坐标系统,即场景坐标、视图坐标、图形项坐标。
场景坐标
场景坐标等价于QPainter的逻辑坐标,一般以场景中心为原点;视图坐标与设备坐标相同,是物理坐标,默认为左上角为原点;图形项的坐标是局部逻辑坐标,一般以图形项的中心为原点。
一个图形项的位置是其中心点在父坐标中的坐标,对于没有父图形项的图形项,其父对象就是场景,图形项的位置就是在场景中的坐标。如果一个图形项还是其他图形项的父项,那么父项进行坐标转换的时候,子项也做同样的坐标转换。
视图坐标
视图坐标就是窗口界面的物理坐标,单位是像素。视图坐标只与widget或视口有关,而与观察的场景无关,左上角坐标为(0,0)
场景坐标
场景是所有图形项的基础坐标,场景坐标描述了每个顶层图形项的位置,创建场景时可以定义矩形区域的坐标范围。
_scene = new QGraphicsScene(-100, -100, 200, 200);
这样就定义了一个左上角坐标为(-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);