Qt碰撞选择框

Qt碰撞选择框,qt,Qt,此应用程序使用ItemIsMovable和ItemIsSelectable标志绘制一些图形项目。 QGraphicsView处理所有键盘和鼠标交互 如果两个boundingRects()发生碰撞,我希望始终选择曲面中最小的项;例如,想象两个矩形,一个在另一个内。用户单击内部矩形将期望选择该矩形 我的想法是: (1) 每次项目更改形状时重新计算Z索引。这似乎有点过分了 (2) 重新实现QGraphicsItem.shape()[我的项目实际上是段路径-如果我可以在段上而不是在边界框上进行选择,它会

此应用程序使用ItemIsMovable和ItemIsSelectable标志绘制一些图形项目。 QGraphicsView处理所有键盘和鼠标交互

如果两个boundingRects()发生碰撞,我希望始终选择曲面中最小的项;例如,想象两个矩形,一个在另一个内。用户单击内部矩形将期望选择该矩形

我的想法是:

(1) 每次项目更改形状时重新计算Z索引。这似乎有点过分了

(2) 重新实现QGraphicsItem.shape()[我的项目实际上是段路径-如果我可以在段上而不是在边界框上进行选择,它会起作用]-返回QPainterPath()似乎没有起作用

(3) 首先捕获项目内的鼠标事件,并执行某些操作(?)以覆盖默认选择机制。这似乎也太过分了

有没有一个简单的方法来实现这个目标

谢谢,
Sébastien

当用户选择一个项目并且图形视图接收到位置时,您可以使用位置和调用功能。这将返回给定位置的项目


现在您有了用户所选点的项目列表,然后您可以比较这些项目以找到最小的和。

Thansk作为您的答案;QGraphicsView如何接收触发选择的单击位置。这就是我的问题,我不知道标准的选择机制是如何挂钩的。有一个qgraphicscene.selectionChanged()信号,但它没有参数——如果我走了那个路线,我需要获得一个全局鼠标位置并将其转换为场景。是否有更简单的方法?从QGraphicsView继承,然后使用鼠标事件函数;mousePressEvent mouseMoveEvent mouseerelease事件。如果您不想子类化QGraphicsView,可以创建一个从QObject继承的类,重写其鼠标事件函数,并将其设置为QGraphicsView实例上的事件筛选器。我已经有一个派生类,它重载按下、移动和释放鼠标事件。我不明白的是如何链接MouseeEvent和selectionEvent。一边我接收场景中的selectionChanged并将其转发到视图,另一边我接收MouseeEvents,但我不会立即接收它们。还是说我可以从鼠标事件中获取选择信息?我来看看,在鼠标事件中,调用QGraphicscene::items,它给出给定位置的项目列表。使用此项目列表,计算最小的项目,并通过调用其setSelected函数将其设置为selected。此处不需要selectionChanged函数。如果这还不清楚,也许我误解了你的要求。哦!我一心想找到一个复杂的解决办法;这看起来更符合逻辑;再次感谢。