如何使弧形的boundingRect()?

时间:2016-05-04 10:56:22

标签: c++ qt

我的类继承自QGraphicsItem。我用painter-> drawArc绘制它,我想为该对象创建相同的边界,但QpainterPath没有画家这样的功能。 arc它不一样,因为它有从中心的线。

代码(宽度是笔的宽度,因此碰撞位于弧的外边框上。):

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 个答案:

答案 0 :(得分:0)

你必须使用#include <fstream> #include <iostream> int myint; int main() { // when entering app: std::ifstream fs("data.txt"); if ( fs ) { fs >> myint; } fs.close(); std::cout << myint; myint++; // when exiting app: std::ofstream fs2("data.txt"); fs2 << myint; } ,但你必须在弧的起点移动当前位置,否则弧将用一条线连接到当前位置。

要在起点移动当前位置,您可以使用QPaintePath::arcTo

实施例

QPaintePath::arcMoveTo

还要考虑使用QPainterPath pp; pp.arcMoveTo(rect, startAngle); pp.arcTo(rect, startAngle, spanAngle); 来赋予形状厚度。并且还将笔宽添加到边界矩形

示例:

QPainterPathStroker