我在QGraphicsItems
的{{1}}中有一些自定义QGraphicsView
。使用QGraphicsScene
方法,我检索给定场景点的所有项目
绘制完这些项目后,它们将不会被移动,旋转或缩放,因此它们的形状不会改变。
我想知道是否有办法改变重叠区域的颜色(当然,如果我至少有两个项目)。
另一种写我问题的方法是:给出一个起点,为场景着色,直到找到一些边界 我没有足够的声誉来发布图片,所以我上传了三个期望结果的例子here。
编辑1:来自Nejat的解决方案,如果我选择一个实际位于两个项目中的点,那么形状,但如果该点只属于一个项目或没有项目,则它不起作用(我上传了一个这种情况的例子here)。
也许我应该采用不同的方法?一旦画完,我就不需要换一个项目了,所以我也会感兴趣的是一个" flat / static"面向像素的解决方案。我可以使用items(QPoint(x, y))
课吗?
编辑2: Nejat的答案适合原始问题。顺便说一下,为了我的目的,我使用了QImage
,在它上面绘制了所有的形状,最后使用了#34;洪水填充"算法填充我想要的区域。
答案 0 :(得分:0)
您可以使用QGraphicsItem::shape
()返回QPainterPath
来检索项目的形状。要获取交叉路径,可以使用:
QPainterPath QPainterPath::intersected ( const QPainterPath & p ) const;
所以你可以得到两个项目的交集路径,如:
QPainterPath intersectedPath = item1->shape()->intersected(item2->shape());
现在您可以通过以下方式填充相交区域:
painter->setBrush(QColor(122, 163, 39));
painter->drawPath(intersectedPath);