如何在QGraphicsScene中的对象之间提取碰撞坐标(x,y)并将坐标(x,y)发送到QLineEdit

时间:2019-02-24 01:07:33

标签: c++ qt qt5 qgraphicsitem

我试图提取在QGraphicsScene内部移动的两个矩形之间的碰撞坐标,并将这些坐标发送到QLineEdit。基本上是矩形碰撞时的位置。 我正在阅读this sourcethis source。 他们建议使用QGraphicsItem::collidesWithPath,但不会成功。

这是与我自己的实现发生冲突的代码片段:

MyItem::MyItem()
{
    angle = (qrand() % 360);
    setRotation(angle);
    speed = 5;
    int startX = 0;
    int startY = 0;
    if((qrand() % 1)){
        startX = (qrand() % 200);
        startY = (qrand() % 200);
    }else{
        startX = (qrand() % -100);
        startY = (qrand() % -100);
    }
    setPos(mapToParent(startX, startY));
}

void MyItem::paint(QPainter *painter,
                   const QStyleOptionGraphicsItem *option,
                   QWidget *widget)
{
    QRectF rec = boundingRect();
    QBrush brush(Qt::gray);
    if(scene()->collidingItems(this).isEmpty()){
        brush.setColor(Qt::green); // no collision
    }else{
        brush.setColor(Qt::red);  // yes collision
        doCollision();
    }
    painter->fillRect(rec, brush);
    painter->drawRect(rec);
}

void MyItem::advance(int phase)
{
    if(!phase) return;
    QPointF location = this->pos();
    setPos(mapToParent(0, -(speed)));
}

void MyItem::doCollision()
{
    if((qrand() %1)) {
        setRotation(rotation() + (180+(qrand() % 10)));
    }else{
        setRotation(rotation() + (180+(qrand() % -10)));
    }
    // see if the new position is in bounds
    QPointF newPoint = mapToParent(-(boundingRect().width()), -(boundingRect().width() + 2));
    if(!scene()->sceneRect().contains((newPoint))){
        newPoint = mapToParent(0, 0); // move it back in bounds
    }else{
        setPos(newPoint); // set new position
    }
}

如何在QGraphicsScene中提取对象之间的碰撞坐标(x,y)并将坐标(x,y)发送到QLineEdit? 感谢您为这个问题提供帮助。

0 个答案:

没有答案