我的类继承自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);
}
答案 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