QGraphicsscene:如何实现 QGraphicsItems 的选择(通过橡皮筋)行为?

QGraphicsscene: How to implement selection (by rubber band) behavior of QGraphicsItems?

所以我知道这里有很多类似的问题,但是 none 确实到了我感兴趣的特定点。

我想实现 QGraphicsItem 的自定义选择行为(例如,在选择时更改其颜色)。显然这是由项目本身处理的,因此需要自己制作一个 class 扩展 QGraphicsItem。在那里,我真的遗漏了一些东西,比如可以覆盖的 onSelectionToggled 方法(插槽)。但我最终发现必须重写 mousePressEvent 方法(毕竟 "selection" 只是左键单击这一抽象概念的更具体术语)。

所以如果在这个方法中我调用:

  setPen( QPen( QColor( "orange" ) ) );
  update();

当我单击单个项目时,颜色实际上发生了变化。 但不是通过场景的橡皮筋进行选择时。 由于没有 onSelectionToggled,我想象场景会 "simulate" 相交项目的相应鼠标事件。

由于情况并非如此,我的问题是:"How can I react to such a selection via rubber band?" 理想情况下 "unified" 方式(通过鼠标单击进行单独选择没有额外的代码)。

另外,我想知道如何防止在选择时绘制虚线边界矩形。我不想要它,并希望在 subclassing QGraphicsItem.

时自动摆脱它

QGraphicsItem class 是 QGraphicsScene 中所有图形项的基础 class。 QGraphicsScene class 包含处理 QGraphicsItem 选择的所有功能。如果你捕捉到信号 QGraphicsScene::selectionChanged() 你应该可以通过

找到选中的项目
`QList<QGraphicsItem *> QGraphicsScene::selectedItems()`

然后您可以为这些项目更换笔并重新绘制。

当然,因为您希望项目在取消选择后恢复到原来的颜色,也许更好的方法是遍历所有项目 (QList<QGraphicsItem *> QGraphicsScene::items()) 并检查它们的 isSelected() 状态把他们的笔换成合适的颜色。