Reputation: 852
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
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
Reputation: 27611
You could either:-
If you just want a line, QGraphicsLineItem is likely the best way to go here.
Upvotes: 3
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