Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 417
Kamalpreet Grewal Avatar asked Oct 02 '14 07:10

Kamalpreet Grewal


2 Answers

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();
}
like image 104
vahancho Avatar answered Oct 22 '22 02:10

vahancho


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.

like image 38
TheDarkKnight Avatar answered Oct 22 '22 01:10

TheDarkKnight