【发布时间】:2016-05-04 10:56:22
【问题描述】:
我的类继承自 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);
}
【问题讨论】:
-
不确定我是否理解您的问题,但
boundingRect()必须始终返回一个rect角度。没办法。不知道你需要这个做什么,但我想你需要找到另一种方法。如果您可以提供更多上下文,也许这里有人有一个很好的建议。 -
这就是我使用
shape();的方式,但是这个函数必须返回一个QPainterPath,而且我不知道如何用QPainterPath画一条弧线,就像我已经用画家。