Qt如何画圆弧?

Posted

技术标签:

【中文标题】Qt如何画圆弧?【英文标题】:How to draw an arc with Qt? 【发布时间】:2013-10-05 11:39:25 【问题描述】:

考虑下图:

我有关于两条线的中心点、它们之间的角度以及两条线的长度的信息。

问题是从底线的末端开始画一条弧线并接触到上面的斜线(如下所示的方式)

     /
    /
   /
  /.
 /  .
/___.

看到了Qt的这些画弧功能:http://qt-project.org/doc/qt-5.1/qtgui/qpainter.html#drawArc

这些函数需要一个矩形作为参数,而我没有。

我应该如何使用这些函数来绘制如上所示的弧线?

【问题讨论】:

你需要先计算边界矩形。 【参考方案1】:
QPointF O; // intersection of lines
QPointF B; // end point of horizontal line
QPointF A; // end point of other line

float halfSide = B.x-O.x;
QRectF rectangle(O.x - halfSide,
                 O.y - halfSide,
                 O.x + halfSide,
                 O.y + halfSide);

int startAngle = 0;
int spanAngle = (atan2(A.y-O.y,A.x-O.x) * 180 / M_PI) * 16;

QPainter painter(this);
painter.drawArc(rectangle, startAngle, spanAngle);

您必须计算边界矩形,而不是使用 atan 来计算线之间的角度。

【讨论】:

对,这是一个比我更优雅(即详细)的答案,谢谢。 :)

以上是关于Qt如何画圆弧?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 动态绘制直线,圆弧段(连续)如何实现

python用turtle画圆弧

vba在cad中画直线和圆弧多段线

css画圆弧

关于如何解决canvas的画圆弧时的锯齿感以及如何让canvas的图更清晰?

猎豹MFC--画椭圆圆弧饼图多边形及其他形状