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

时间:2016-03-25 09:47:04

标签: qt selection qgraphicsitem qgraphicsscene

所以我知道这里有很多类似的问题,但没有一个真正达到我感兴趣的具体点。

我想实现QGraphicsItem的自定义选择行为(例如,在选择时更改其颜色)。显然,这是由项目本身处理的,因此需要创建一个扩展QGraphicsItem的自己的类。在那里,我真的错过了一些东西,比如可以覆盖的onSelectionToggled方法(槽)。但我终于想通了一个必须覆盖mousePressEvent方法(毕竟“选择”只是左键单击抽象概念的一个更具体的术语)。

所以如果在这个方法中我打电话:

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

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

由于情况并非如此,我的问题是:“我如何通过橡皮筋对这种选择做出反应?”理想情况下采用“统一”方式(无需通过鼠标点击进行单独选择的额外代码)。

另外,我想知道如何防止在选择时绘制虚线边界矩形。我不想要它,并希望在继承QGraphicsItem时自动摆脱它。

1 个答案:

答案 0 :(得分:1)

QGraphicsItem类是QGraphicsScene中所有图形项的基类。 QGraphicsScene类包含处理QGraphicsItem选择的所有功能。如果您发现信号QGraphicsScene::selectionChanged(),您应该能够通过

找到所选项目
`QList<QGraphicsItem *> QGraphicsScene::selectedItems()`
然后,您可以更改这些项目的笔并重新绘制。

当然,因为您希望项目在未被选中后返回原始颜色,或许更好的方法是迭代所有项目(QList<QGraphicsItem *> QGraphicsScene::items())并检查其isSelected()状态是否更改他们的笔变成了合适的颜色。