gpt4 book ai didi

c++ - 为 Qt 中 Items 交集定义的区域着色

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:35 26 4
gpt4 key购买 nike

我在 QGraphicsSceneQGraphicsView 中有一些自定义的 QGraphicsItems。使用 items(QPoint(x, y)) 方法,我检索给定场景点的所有项目。
一旦这些项目被绘制出来,它们就不会被移动、旋转或缩放,所以它们的形状也不会改变。

我想知道是否有办法只改变重叠区域的颜色(当然,如果我至少有两个项目)。

另一种写我的问题的方法是:给定一个起点,为场景着色,直到找到一些边界。
我没有足够的声誉来发布图片,所以我上传了三个所需结果的示例 here .

编辑 1: 如果我选择一个实际上位于两个项目形状内的点,Nejat 的解决方案有效,但如果该点仅属于一个项目或不属于任何项目(我上传了这个案例的示例 here )。

也许我应该使用不同的方法?绘制完成后,我不需要更改项目,因此我也会对“平面/静态”面向像素的解决方案感兴趣。我可以使用 QImage 类吗?

编辑 2:Nejat 的回答对于原始问题是正确的。顺便说一句,出于我的目的,我使用了 QImage,在其上绘制所有形状,最后使用“flood fill”算法来填充我想要的区域。

最佳答案

您可以使用返回 QPainterPathQGraphicsItem::shape () 来检索项目的形状。要采用相交路径,可以使用:

QPainterPath QPainterPath::intersected ( const QPainterPath & p ) const;

因此您可以获得两个项目的交集路径,例如:

QPainterPath intersectedPath = item1->shape()->intersected(item2->shape());

现在您可以通过以下方式填充相交区域:

painter->setBrush(QColor(122, 163, 39));
painter->drawPath(intersectedPath);

关于c++ - 为 Qt 中 Items 交集定义的区域着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com