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

How to filter visible QGraphicsItems from QGraphicsScene in QGraphicsView?

所以,如果我理解正确的话,QGraphicsItem 是属于一个 QGraphicsScene(基本上是场景管理器)的(抽象)图形项。

QGraphicsView 特定于 "view" 该场景,多个视图可以查看同一场景。

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

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

无法直接执行,但使用视图场景(类似于视图模型)会很容易。

项目可见性是场景不可或缺的一部分,而不是视图。这是有道理的:一旦你开始让场景改变项目属性,就永远没有一个可以停止的理智的地方。接下来你想稍微移动项目等。所以这在当前设计中根本不支持。

您可以拥有一个包含所有项目的原型场景,然后是包含您希望可见的项目副本的视图场景(视图模型)。这些项目很小且复制起来很便宜,所以即使场景中有上千个项目,以这种方式实现它的成本也是微乎其微的。只需创建一个工厂来复制您感兴趣的所有项目类型,然后 运行 它们出现在原型场景中,忽略您不希望显示的项目。