Search code examples
qtlinebounding-boxqpainter

Determine bounding rect of line in Qt


I am drawing a line using QPainterPath between two points as follows:

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);

I have defined bounding rect as:

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

I get line painted correctly when:

start_p.x() < end_p.x() 

and

start_p.y() < end_p.y()

How should the bounding rect be defined so that line is drawn correctly irrespective of the relationship between the coordinates of two points(start_p and end_p)?


Solution

  • You might try to normalize your rectangle:

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