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也不会在这里工作.我想通过最小化线条形状的边界矩形来实现这一点.

如果您的项目形状不是矩形,或者是旋转的矩形使用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),...
| 归档时间: |
|
| 查看次数: |
6657 次 |
| 最近记录: |