gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:15 28 4
gpt4 key购买 nike

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

根据我看到带有 QPainter 的 voidrealms 视频的理解和 QGraphicsView + QGraphicsScene两者都可以画出复杂的二维对象。

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

这是正确的吗?

我们在什么情况下使用QPainter,什么时候使用QGraphicsScene+QGraphicsView?我主要对制作计算几何中某些算法的动画感​​兴趣,所以我似乎会使用后者。

我正在使用 Qt5.6。

最佳答案

QGraphicsItem 本身使用 QPainter 进行绘图,因此您的问题格式不正确。

Qt 为图形提供了 3 种不同的 API - 基于 QWidget、基于 QGraphicsScene 堆栈和基于 QtQuick

QWidget 用于“典型的”GUI 矩形元素、按钮、复选框、下拉菜单等等。小部件是 QObject 派生的,因此您可以获得信号/插槽等。它是典型用户界面项目的最佳选择,而不是自定义图形,尽管它们仍然完全有可能实现。

QGraphicsScene 顾名思义,就是一个图形场景,可以滚动、缩放、旋转场景,场景和 View 是独立的对象,绘图本身和widgets是一样的,但是范式不是典型的小部件“绘制 GUI”,QGraphicsItem 本身也不是 QObject 派生的,因此您没有信号/插槽等,尽管您可以如果需要,请使用 QGraphicsObject。常规图形项目更轻巧,支持 LOD 绘图和一些不属于小部件 API 的额外功能。有一些库存图形项目,例如线条、矩形等等,类似于库存小部件,对于所有自定义内容,您必须使用 QPainter 实现您自己的绘画,就像使用小部件一样。由于更轻巧且支持 LOD,您可以拥有比小部件多得多的对象数。

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

关于c++ - 使用 QPainter 和 (QGraphicsView + QGraphicsScene) 绘图之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389717/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com