1

使用 QGraphicsView/QGraphicsScene/QGraphicsItem,我需要创建另一个 QGraphicsItem 的多个视图。

换句话说,在 QGraphicsScene 中,我需要创建多个 QGraphicItem,它们显示存储在屏幕外某处的其他 QGraphicsItem 的一部分。它有点像模型/视图框架,其中一个 QGraphicsItem 充当模型,而其他 QGraphicsItem 充当视图 - 显示(剪辑)其他项目的部分。(见附图) 图片

我怎样才能做到这一点?请注意,“视图”不应该是只读的。每个视图都应该对鼠标移动、键盘输入做出反应,并且应该在模型中的某些项目发生变化时正确地重新绘制自己。

最愚蠢的方法是将隐藏项目绘制到 QImage 上,然后在其他项目中显示该 QImage 的部分。然而,这将意味着大量的内存浪费。还有其他方法吗?

Qt 4.8,VC2008 express,Windows平台。

- 编辑 -

我需要在场景中显示部分场景(或屏幕外 QGraphicsItem)。这有点像 3D 游戏中的门户。

4

1 回答 1

0

经过一些研究,我发现(据我所知)Qt 没有针对这种情况的(记录的)方法。

所以我决定写几个我自己的方法

  1. 将 QGraphicsItems 层次结构绘制到任何 QPaintDevice(遍历子层次结构 + 为所有涉及的项目调用 paint() 方法)
  2. 将任何区域的输入(鼠标/键盘)事件转换为选定的 QGraphicsItem。

这实际上可能有点棘手,因为我需要处理剪裁(按形状剪裁子项的项目)和重绘复杂的组件,如 QGraphicsWidget,但据我所知可以做到。此外,这样做我将失去 QGraphicsView 提供的 BSP 优化,但对于我的特定场景来说,这应该是一个可以接受的折衷方案。

于 2013-03-15T05:59:54.623 回答