确定Qt中线的边界矩形

时间:2014-10-02 07:54:26

标签: qt line bounding-box qpainter

我在两点之间使用QPainterPath绘制一条线,如下所示:

QPainterPath line;
line.moveTo(start_p);
line.lineTo(end_p);

QPen paintpen(Qt::black);
paintpen.setWidth(1);
painter->setRenderHint(QPainter::Antialiasing);
painter->setBrush(Qt::SolidPattern);
painter->setPen(paintpen);
painter->drawPath(line);

我将边界矩形定义为:

QRectF Line::boundingRect() const
{
 return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y());
}

我在以下情况下正确画线:

start_p.x() < end_p.x() 

start_p.y() < end_p.y()

如何定义边界矩形,以便无论两点坐标(start_p和end_p)之间的关系如何,都能正确绘制直线?

3 个答案:

答案 0 :(得分:7)

您可以尝试规范化矩形:

QRectF Line::boundingRect() const
{
    return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()).normalized();
}

答案 1 :(得分:3)

你可以: -

  • 检查结束大于起点的条件并适当设置矩形
  • 返回QPainterPath的边界矩形
  • 使用QGraphicsLineItem代替重新发明轮子。

如果您只想要一条线,QGraphicsLineItem可能是最好的方式。

答案 2 :(得分:0)

您可以使用QPainterPath::boundingRect返回QPainterPath的边界矩形。您可以将画家路径保留为类成员,并在boundingRect函数中访问它:

QRectF Line::boundingRect() const
{
     return line.boundingRect();
}