确定Qt中线的边界矩形

Posted

技术标签:

【中文标题】确定Qt中线的边界矩形【英文标题】:Determine bounding rect of line in Qt 【发布时间】:2014-10-02 07:54:25 【问题描述】:

我正在使用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_p.y() < end_p.y()

应该如何定义边界矩形,以便无论两点(start_p 和 end_p)的坐标之间的关系如何,都可以正确绘制线?

【问题讨论】:

【参考方案1】:

你可以尝试标准化你的矩形:

QRectF Line::boundingRect() const

    return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()).normalized();

【讨论】:

此版本的 QRectF 构造函数 (doc.qt.io/qt-5/qrectf.html#QRectF-3) 的参数是 x、y、宽度和高度。不应该是QRectF(start_p, end_p)(doc.qt.io/qt-5/qrectf.html#QRectF-2)吗? @Mitch,对,也可能是QRectF(start_p, end_p)【参考方案2】:

你可以:-

检查结束点大于起点的条件并适当设置矩形 返回 QPainterPath 的边界矩形 使用QGraphicsLineItem 而不是重新发明***。

如果您只想要一条线,QGraphicsLineItem 可能是最好的方式。

【讨论】:

第三个最好!【参考方案3】:

您可以使用QPainterPath::boundingRect,它返回QPainterPath 的边界矩形。您可以将画家路径保留为类成员并在boundingRect 函数中访问它:

QRectF Line::boundingRect() const

     return line.boundingRect();

【讨论】:

以上是关于确定Qt中线的边界矩形的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时,QT在另一个顶部绘制一个矩形

Qt - 在 translate() 之后获取小部件内矩形的位置

查找/重新映射 OpenGL ES 坐标平面的边界

确定绘制到画布中的形状/图形的边界

UIView 的边界矩形可以大于框架矩形是不是有意义?

opencv 7 -- 边界矩形