使用QPainter和(QGraphicsView + QGraphicsScene)绘图之间的区别

smi*_*dha 5 c++ qt

我是QT库的新手,我想知道QPainter和QGraphicsScene之间的区别.

根据我的理解,通过使用QPainterQGraphicsView + QGraphicsScene查看voidrealms视频,您可以绘制复杂的2d对象.

后者的主要区别是有一个任意大的场景我们通过"窗口"查看(我相信Qt的人称之为视口?)并且这个场景可以用侧边栏滚动.我们也可以使用GraphicsView小部件中的图形进行交互,比如用鼠标进行交互,但在QPainter中我们不能.

它是否正确?

我们在什么用例中使用QPainter,何时使用QGraphicsScene + QGraphicsView?我主要想在计算几何中制作一些算法的动画,所以我似乎将使用后者.

我使用的是Qt5.6.

dte*_*ech 16

QGraphicsItem本身QPainter用于绘图,所以你的问题是不正确的.

Qt提供3种不同的API,用于QWidget基于图形,基于QGraphicsScene堆栈和QtQuick基于.

QWidget用于"典型"GUI矩形元素,按钮,复选框,下拉菜单等等.小部件是QObject派生的,所以你得到信号/插槽等.它对于典型的用户界面项目是最佳的,而不是自定义图形,尽管它们仍然完全可以实现.

QGraphicsScene顾名思义,是一个图形场景,你可以滚动,缩放,旋转场景,场景和视图是单独的对象,绘图本身与小部件相同,但范式不是小部件"绘制GUI"的典型,QGraphicsItem本身也不是QObject派生的,所以你没有信号/插槽等,虽然你可以使用,QGraphicsObject如果你需要它们.常规图形项更轻量级,支持LOD绘图和一些不属于小部件API的额外功能.有一些库存图形项目,如线条,矩形和诸如此类的东西,类似于库存小部件的方式,对于一切自定义,您必须使用QPainter小部件来实现自己的绘画.更轻量级和支持LOD,您可以拥有比小部件更高的对象数.

QtQuick是最新的图形API,自Qt5以来可用,它使用QML而不是C++,并且在其中开发和原型非常容易和快速.动画和自定义图形元素使用QML实现最快,最简单.它可以使用自定义C++类型进行扩展,包括图形项,使用QPainter或QML场景图API,后者的扩展稍微复杂一些.您还有一个Canvas元素,其API类似于QPainter您可以直接使用的API .由于额外的功能,这个API比图形场景更重,甚至比小部件更重,但是由于场景图形,图形性能通常比小部件或图形场景好得多,即使你将它们与OpenGL结合使用也是如此.

  • LOD代表细节层次 - 当对象变小时,您使用更快的绘制例程来绘制更少的详细对象 (3认同)

Rei*_*ica 5

QPainter是让你可以操纵小部件上的像素。QGraphicsView在内部使用它来渲染场​​景的内容。如果您在场景中使用任何自定义项目,则必须编写自己的渲染代码QPainter来渲染它们。图形场景框架允许您在项目树中管理几何图形,并提供对项目的轻松操作。无论你做什么,QPainter绘图始终都是在进行。如果您的几何图形很简单或不需要交互和/或分层,请QPainter直接使用。否则,使用图形场景或 QML 的场景几何图形,然后通过 OpenGL 进行渲染。