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