确定Qt中直线的边界矩形
我使用确定Qt中直线的边界矩形,qt,line,bounding-box,qpainter,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
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\u p.x()
及
start\u p.y()
如何定义边界矩形,以便在不考虑两点(起点和终点)坐标之间的关系的情况下正确绘制直线?您可以使用
QPainterPath::boundingRect
返回QPainterPath
的边界矩形。您可以将画师路径保留为类成员,并在boundingRect
函数中访问它:
QRectF Line::boundingRect() const
{
return line.boundingRect();
}
你可以:-
- 检查端点大于起点时的条件,并适当设置rect
- 返回QPainterPath的边界矩形
- 使用一种新方法,而不是重新发明轮子
如果您只需要一条直线,这可能是最好的方法。您可以尝试规范化矩形:
QRectF Line::boundingRect() const
{
return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()).normalized();
}
第三个是最好的!
QRectF Line::boundingRect() const
{
return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()).normalized();
}