Qt中的QGraphicsScene等对象的坐标系是怎么设置的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中的QGraphicsScene等对象的坐标系是怎么设置的相关的知识,希望对你有一定的参考价值。

参考技术A 可以使用setSceneRect()设置QGraphicsScene的大小。如果不设置,则默认为scene中包含所有子元素的边界区域( itemsBoundingRect()函数的返回值)。

更详细的说明参看QGraphicsScene的文档,讲解很详细,看下面这段:

The scene's bounding rect is set by calling setSceneRect(). Items can be placed at any position on the scene, and the size of the scene is by default unlimited. The scene rect is used only for internal bookkeeping, maintaining the scene's item index. If the scene rect is unset, QGraphicsScene will use the bounding area of all items, as returned by itemsBoundingRect(), as the scene rect. However, itemsBoundingRect() is a relatively time consuming function, as it operates by collecting positional information for every item on the scene. Because of this, you should always set the scene rect when operating on large scenes.

QT:QGraphicsView QGraphicsScene QGraphicsItem理解

参考技术A 最近使用QT来编写一个可局域网联机对战的小游戏,主要使用GraphicsView来实现游戏界面,游戏动画方面由于坐标系和函数机制方面的不了解,做起来有点蛋疼,用了一下午和同伴一起写demo、查资料,大致理清了头绪,整理一下理解。

QGraphicsView一般用法是要 setScene(QGraphicsScene&) 绑定一个Scene对象。QGraphicsScene的坐标系是这样的:

Item坐标系的x轴、y轴、原点的关系跟Scene一样。在QGraphicsItem中有几个重要的函数,分别是 boundingRect() 、 shape() 、 paint() ,这函数绘图都是基于Item的坐标系,着重强调,基于的原点是Item坐标系的原点,使用 paint() 来绘制Item时需要注意。而Item坐标系的原点又是一个大坑。
在Scene使用 addItem() 添加Item时,添加的Item的坐标系原点默认在画面的中央,可以调用 setPos(x,y) 函数来重设Item坐标系原点,这时Item坐标系原点处于设置的x、y处。

Item的重绘可以在Scene中调用 Invalidate(flag) 来重绘Item层,也可以在Item中调用 update() 。此时的重绘会发生在 boundingRect() 函数返回的矩形区域中,同时这个矩形区域也是响应事件的区域,在没有重载 shape() 的情况下还会用于碰撞检测。
使用 prepareGeometryChange() 函数可以修改 boudingRect() 返回的矩形区域大小,同时还会根据情况来重绘视图。

github项目

以上是关于Qt中的QGraphicsScene等对象的坐标系是怎么设置的的主要内容,如果未能解决你的问题,请参考以下文章

QT:QGraphicsView QGraphicsScene QGraphicsItem理解

QT:我需要通过 QGraphicsScene 获取添加到 QGraphicsView 的图像坐标

Qt中的Qt Charts

Qt:选择的项目出现在 QGraphicsScene 的顶部

如何在 Qt 中为场景中的对象设置属性

使用 Qt 的 QGraphicsScene/QGraphicsView 进行 2D 游戏