如何在QGraphicsItem中绘制一半饼图

时间:2012-01-24 19:28:11

标签: qt qgraphicsview

我试图在qGraphicsview框架中绘制这样的一半馅饼。enter image description here

我试图绘制两个馅饼,其中一个的颜色是透明的,但它没有用,我决定在这里问。

因为我不太了解QPainterPath,所以绘制弧形和馅饼是不成功的!

任何回答oridea将不胜感激。

2 个答案:

答案 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()方法可以做到,但是看一下示例图像,你就可以找到一个像垫圈一样的饼。

这样的事情:

enter image description here

这是用以下代码生成的:

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的代码,因为我没有时间测试该代码,但我相信上面的代码片段解决了如何创建几何体的基本难点。