我的类继承自QGraphicsItem。我使用painter-〉drawArc绘制它,我想为该对象创建相同的边界,但QpainterPath没有painter这样的功能。arcTo是不一样的,因为它有从中心开始的直线。
代码(宽度是笔的宽度,因此碰撞在弧的外部边界上。):
QRectF Circle::boundingRect() const
{
QRectF rect( -radius, -radius, radius*2, radius*2);
return rect;
}
QPainterPath Circle::shape() const
{
QPainterPath path;
path.arcTo(-radius-width, -radius-width, (radius+width)*2, (radius+width)*2, startAngle/16, spanAngle/16);
return path;
}
void Circle::paint(QPainter * painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPen pen;
pen.setCapStyle(Qt::FlatCap);
pen.setWidth(width);
painter->setPen(pen);
painter->drawArc(boundingRect(), startAngle, spanAngle);
}
1条答案
按热度按时间xa9qqrwz1#
你必须使用
QPainterPath::arcTo
,但你必须在弧的起点移动当前位置,否则弧将用一条线连接到当前位置。要移动起点中的当前位置,可以使用
QPainterPath::arcMoveTo
示例
还可以考虑使用
QPainterPathStroker
为形状给予厚度。,并将笔宽添加到边界矩形示例: