我是Qt
的初学者。我想绘制道路和移动的圆圈。圆圈只能在路上移动。道路由一个简单的矩形组成。
在绘画道路时,我正在初始化QPolygonF
,然后附加所需矩形的4个角。
圆圈也绘制了一个boundingRect,返回QRectF
( - 10,-10,20,20)。
我正在使用collidesWithItem来确定圆圈的移动位置。
问题是圆圈只是沿着道路的中心移动,而我的研究似乎认为boundingRect不是合适的功能。
绘制可沿整条道路移动的道路和圆圈的简单方法是什么?
涂抹道路的代码(边缘):
void Edge::paint( QPainter* painter,
const QStyleOptionGraphicsItem* option,
QWidget* widget )
{
painter->setBrush(Qt::gray);
int x1= startPoint.x();
int y1= startPoint.y();
int x2= endPoint.x();
int y2= endPoint.y();
QPolygonF Rectangle;
if (y1 != y2)
{
Rectangle.append(QPointF(x1-width/2,y1));
Rectangle.append(QPointF(x1+width/2,y1));
Rectangle.append(QPointF(x2+width/2,y2));
Rectangle.append(QPointF(x2-width/2,y2));
}
if (x1 != x2)
{
Rectangle.append(QPointF(x1,y1+width/2));
Rectangle.append(QPointF(x1,y1-width/2));
Rectangle.append(QPointF(x2,y2-width/2));
Rectangle.append(QPointF(x2,y2+width/2));
}
painter->drawPolygon(Rectangle);
}
这是道路(边缘)的boundingRect的代码:
QRectF Edge::boundingRect() const
{
int x1= startPoint.x();
int y1= startPoint.y();
int x2= endPoint.x();
int y2= endPoint.y();
if (y1 != y2)
{
return QRectF(x1 - width/2, y1, width, y2 - y1);
}
if (x1 != x2)
{
return QRectF(x1, y1 - width/2, x2 - x1, width);
}
}