所以我知道这里有很多类似的问题,但没有一个真正达到我感兴趣的具体点。
我想实现QGraphicsItem
的自定义选择行为(例如,在选择时更改其颜色)。显然,这是由项目本身处理的,因此需要创建一个扩展QGraphicsItem
的自己的类。在那里,我真的错过了一些东西,比如可以覆盖的onSelectionToggled
方法(槽)。但我终于想通了一个必须覆盖mousePressEvent
方法(毕竟“选择”只是左键单击抽象概念的一个更具体的术语)。
所以如果在这个方法中我打电话:
setPen( QPen( QColor( "orange" ) ) );
update();
单击单个项目时,颜色实际上会发生变化。
但是当选择通过场景的橡皮筋发生时。
由于没有onSelectionToggled
,我想象场景将“模拟”相交项目的相应鼠标事件。
由于情况并非如此,我的问题是:“我如何通过橡皮筋对这种选择做出反应?”理想情况下采用“统一”方式(无需通过鼠标点击进行单独选择的额外代码)。
另外,我想知道如何防止在选择时绘制虚线边界矩形。我不想要它,并希望在继承QGraphicsItem
时自动摆脱它。
答案 0 :(得分:1)
QGraphicsItem
类是QGraphicsScene
中所有图形项的基类。 QGraphicsScene
类包含处理QGraphicsItem
选择的所有功能。如果您发现信号QGraphicsScene::selectionChanged()
,您应该能够通过
`QList<QGraphicsItem *> QGraphicsScene::selectedItems()`
然后,您可以更改这些项目的笔并重新绘制。
当然,因为您希望项目在未被选中后返回原始颜色,或许更好的方法是迭代所有项目(QList<QGraphicsItem *> QGraphicsScene::items()
)并检查其isSelected()
状态是否更改他们的笔变成了合适的颜色。