Kamalpreet Grewal
Kamalpreet Grewal

Reputation: 852

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

Upvotes: 6

Views: 4145

Answers (3)

vahancho
vahancho

Reputation: 21220

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

Upvotes: 7

TheDarkKnight
TheDarkKnight

Reputation: 27611

You could either:-

  • Check for the conditions when the ends are greater than the start points and set the rect appropriately
  • Return the QPainterPath's bounding rect
  • Use a QGraphicsLineItem instead of reinventing the wheel.

If you just want a line, QGraphicsLineItem is likely the best way to go here.

Upvotes: 3

Nejat
Nejat

Reputation: 32635

You can use QPainterPath::boundingRect which returns the bounding rectangle of the QPainterPath. You can keep the painter path as a class member and access it in the boundingRect function :

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

Upvotes: 0

Related Questions