我想阻止标签在我的场景中发生碰撞,因此使用此代码检查碰撞: -
QGraphicsTextItem *textLabel = new QGraphicsTextItem;
....
addItem(textLabel);
//check for collision
QList<QGraphicsItem*> items = this->items(textLabel>boundingRect(),Qt::IntersectsItemBoundingRect);
我从未在列表中找到任何项目,但在屏幕上我可以看到碰撞。我是否错误地阅读了文档?
答案 0 :(得分:1)
您正在检查是否有任何物品与标签的局部坐标中的标签的边界矩形相撞。你应该做的是检查相对于场景坐标。
但是,请注意QGraphicsItem具有此功能: -
QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
正如文档所述: -
返回与此项目冲突的所有项目的列表。 通过将模式应用于与该项目进行比较的项目来确定检测到碰撞的方式,即,针对该项目的形状检查每个项目的形状或边界矩形。 mode的默认值为Qt :: IntersectsItemShape。
所以你最好打电话: -
QList<QGraphicsItem*> items = this->collidingItems();