自定义边界矩形的形状

Kam*_*wal 8 qt bounding-box qgraphicsitem

我正在使用鼠标点击绘制一条线.使用绘图函数绘制线条:

painter->drawLine(start_p, end_p);
Run Code Online (Sandbox Code Playgroud)

线的边界矩形定义为:

QRectF Line::boundingRect() const
{
  // bounding rectangle for line
  return QRectF(start_p, end_p).normalized();
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这显示了画线.我得到了这个的边界矩形如图所示:

在此输入图像描述

我希望根据项目的形状来设置边界矩形,例如:在此输入图像描述

怎么做到这一点?

编辑

在选择任何重叠线条时,选择顶部带有边界矩形的线条(参见下图).即使使用setZValue也不会在这里工作.我想通过最小化线条形状的边界矩形来实现这一点.

在此输入图像描述

thu*_*uga 9

如果您的项目形状不是矩形,或者是旋转的矩形使用QGraphicsItem::shape.

这个函数应该返回一个QPainterPath.您应该能够使用创建路径QPainterPath::addPolygon.

这是一个小例子:

QPainterPath Item::shape() const
{
    QPainterPath path;
    QPolygon polygon;
    polygon << QPoint(0, 0);
    polygon << QPoint(5, 5);
    polygon << QPoint(width, height);
    polygon << QPoint(width - 5, height - 5);
    path.addPolygon(polygon);

    return path;
}
Run Code Online (Sandbox Code Playgroud)

你当然应该以不同的方式计算你在路径内的积分,但是你明白了.现在当你点击一个项目时,它只会在点击发生在由你定义的形状内时选择它QPainterPath.

如果您需要制作曲线,可以QPainterPathStroker::createStroke按照cmannett85的建议使用.


小智 -1

如果你想要这样的东西,你必须给自己画一个界限。让 Qt 将其 QRect 用作​​边界,并根据前一个 QRect 的角(左上角和右下角)定义新的 QRect。例如,如果左上角是(2,2),则新的 QRect 左上角是(1,2),右上角是(2,1),...