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()
状态把他们的笔换成合适的颜色。
所以我知道这里有很多类似的问题,但是 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()
状态把他们的笔换成合适的颜色。