【发布时间】:2013-03-03 01:45:40
【问题描述】:
使用 QGraphicsView/QGraphicsScene/QGraphicsItem,我需要创建另一个 QGraphicsItem 的多个视图。
换句话说,在 QGraphicsScene 中,我需要创建多个 QGraphicItem,它们显示存储在屏幕外某处的其他 QGraphicsItem 的一部分。它有点像模型/视图框架,其中一个 QGraphicsItem 充当模型,而其他 QGraphicsItem 充当视图 - 显示(剪辑)其他项目的部分。 (见附图)
我该怎么做?请注意,“视图”不应该是只读的。每个视图都应该对鼠标移动、键盘输入做出反应,并且当模型中的某些项目发生变化时应该正确地重新绘制自己。
最愚蠢的做法是将隐藏的项目绘制到 QImage 上,然后在其他项目中显示该 QImage 的部分。然而,这将意味着大量的内存浪费。还有其他方法吗?
Qt 4.8,VC2008 express,Windows 平台。
--编辑--
我需要在场景中显示部分场景(或屏幕外 QGraphicsItem)。这有点像 3D 游戏中的传送门。
【问题讨论】:
-
为什么你的“模型”是
QGraphicsItem?我会以“模型”是提供必要数据的普通 C++(可能是 Qt-)对象的方式设计它,以便每个“视图”QGraphicsItem可以获取相关数据并相应地绘制它跨度> -
@Andreas:因为我需要多次显示同一个 QGraphicsItem 的部分。
-
好的,所以你的“模型”项目的paint()已经根据需要绘制了所有东西,你只想在你的“视图”项目中显示绘制结果中的特定区域,对吧?跨度>
-
您是否尝试从视图项的
paint()方法中简单地调用模型项的paint()方法,并在之前设置适当的翻译转换(并且可能在查看项目)? -
@Andres:是的,但它必须对鼠标移动做出反应,处理焦点/选择,并且如果底层模型发生变化,视图必须正确重绘自己。 这就是的问题。