如何在QGraphicsView中从QGraphicsScene中过滤可见的QGraphicsItems?

时间:2015-08-10 19:57:34

标签: c++ qt qgraphicsview qgraphicsitem qgraphicsscene

所以,如果我弄清楚这一点,QGraphicsItem是属于一个QGraphicsScene(基本上是场景管理器)的(抽象)图形项目。

QGraphicsView是该场景的特定“视图”,多个视图可以查看同一场景。

如果我要在同一个场景上观看3个视图,其中一个视图查看1-5 / 10个项目,其他5-10 / 10和第三个视图查看所有这些视图,我需要有一个场景和三个视图用某种过滤器来绘制项目。这可能吗?

如何过滤特定QGraphicsView中显示的QGraphicsItem?

1 个答案:

答案 0 :(得分:1)

不可能直接执行,但使用viewscenes(类似于viewmodels)则相当容易。

项目可见性是场景的组成部分,而不是视图。这是有道理的:一旦你开始让场景更改项目属性,那么从来没有一个人可能会停下来的理智的地方。接下来你想稍微移动一些项目等等。所以在当前的设计中根本不支持。

您可以拥有包含所有项目的原型场景,然后是包含您希望显示的项目副本的viewscenes(viewmodels)。这些物品既小又便宜,所以即使在场景中有一千件物品,以这种方式实施它的成本也是微不足道的。只需让工厂复制您感兴趣的所有项目类型,然后在原型场景中运行它们,忽略您希望不显示的项目。