在 Qt 框架中,QWidget
、QGraphicsView
、QGraphicsScene
和 QGraphicsRectItem
确实都与坐标系统有关,但它们各自的坐标系统有所不同,且它们之间存在着一定的关系。以下是对这四个对象坐标系统的解释和它们之间的关系:
- QWidget:
QWidget
使用的是窗口坐标系统。这是基于屏幕像素的坐标系统,原点 (0,0) 通常在窗口的左上角。QWidget
的坐标系统是其子控件布局和定位的基础。
- QGraphicsView:
QGraphicsView
本身也是一个QWidget
,因此它也有自己的窗口坐标系统。QGraphicsView
提供了一个视图来展示QGraphicsScene
的内容。这个视图可以缩放和旋转,从而改变场景内容的显示方式。
- QGraphicsScene:
QGraphicsScene
使用的是场景坐标系统,这是一个逻辑坐标系统,与屏幕像素无关。- 场景的原点 (0,0) 是在场景的左上角,但与
QGraphicsView
的显示窗口大小和位置无关。 QGraphicsScene
的坐标系统用于定义和布局其中的图形项(如QGraphicsRectItem
)。
- QGraphicsRectItem (以及其他 QGraphicsItem 派生类):
- 这些图形项使用
QGraphicsScene
的坐标系统来定义它们在场景中的位置和大小。 - 图形项的坐标是相对于场景原点的,而不是相对于视图或窗口的。
- 这些图形项使用
关系:
- 当你在
QGraphicsScene
中添加一个QGraphicsRectItem
时,你会指定其在场景坐标系统中的位置和大小。 QGraphicsView
负责将QGraphicsScene
的内容映射到其自己的窗口坐标系统中进行显示。这包括处理任何缩放、旋转或平移变换。- 如果
QGraphicsView
被嵌入到一个QWidget
中,那么QGraphicsView
的窗口坐标系统将是相对于其父QWidget
的。
简而言之,每个对象都有其自己的坐标系统,这些坐标系统通过 QGraphicsView
的变换功能相互关联。QGraphicsScene
和其内部的图形项使用逻辑坐标,而 QGraphicsView
和 QWidget
则使用基于屏幕的像素坐标。