Qt:画一个正方形并设定它的界限

时间:2014-04-19 14:36:54

标签: c++ qt qobject

我是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);
    }
}

0 个答案:

没有答案