我试图在qGraphicsview框架中绘制这样的一半馅饼。
我试图绘制两个馅饼,其中一个的颜色是透明的,但它没有用,我决定在这里问。
因为我不太了解QPainterPath,所以绘制弧形和馅饼是不成功的!
任何回答oridea将不胜感激。
答案 0 :(得分:3)
我同意Neox,这张照片真的不是一个馅饼;)。如果你想要一个真实的馅饼(即:一个圆圈的一部分),你可以使用画家的内置方法:
QRect rect( -radius, -radius, radius*2, radius*2);
painter->drawPie( rect, startAngle*16, span*16 );
int radius
显然,你的馅饼的半径。
int startAngle
馅饼的开始位置,例如与正X轴偏移20°
int span
弧拉伸的度数,例如一个跨度= 320°的饼将总共340°,或与正X轴成-20°。 (请参阅QPainter文档了解奇迹* 16)
这应该给你一个很好的PacMan ^^ - 或者你可以玩这些值。
现在,如果没有更多详细信息,您需要确定实际放置此代码段的位置。当然,它将在某个图形项的绘制方法中,例如,自定义QGraphicsItem,因此使用作为此方法的输入的画家。这实际上取决于你的小部件和东西的设置......
Qt实际上有一个非常棒的文档,所以请务必先检查一下:(我自己只用了两个星期,但你可以在文档中得到很好的结果)
QGraphicsItem:http://qt-project.org/doc/qt-4.8/qgraphicsitem.html
QPainter:http://qt-project.org/doc/qt-4.8/qpainter.html
干杯, 路易丝
PS:第一个答案,耶!
答案 1 :(得分:0)
擦除是不切实际的,因为很快你会删除图像中的其他东西,或者至少你需要非常小心你画画的顺序。
从字面上看,如果你正在寻找一种绘制饼图的方法,那么drawPie()方法可以做到,但是看一下示例图像,你就可以找到一个像垫圈一样的饼。
这样的事情:
这是用以下代码生成的:
QImage image(width,height,QImage::Format_ARGB32);
image.fill(qRgba(0,0,0,0)); // clear and make transparent
QPainter painter; // use a painter to draw to the image
painter.begin(&image);
// center at (0,0) and scale so that range [-1,1] cover whole image
QTransform transform;
transform.translate(texSize/2, texSize/2);
transform.scale(texSize/2, -texSize/2);
painter.setTransform(transform);
// outer and inner washer dimensions
QRectF r1(-1, -1, 2, 2);
QRectF r2(-0.5, -0.5, 1, 1);
//-------------- this is the essence of the matter -------------
// create a path with two arcs to form the outline
QPainterPath path;
path.arcTo(r1,0,90); // from 3 'clock 90 degrees cw
path.arcTo(r2,90,-90); // from 12 'clock 90 degrees ccw
//--------------------------------------------------------------
// and finally fill it
painter.fillPath(path, Qt::green);
// save it to file
image.save(QLatin1String("testimage.png"));
上面给出的不是QGraphicsItem。但是我相信你应该做这个QGraphicsPathItem并从上面提起代码来创建路径。
我不想发布使用QGraphicsPathItem的代码,因为我没有时间测试该代码,但我相信上面的代码片段解决了如何创建几何体的基本难点。