gpt4 book ai didi

c++ - 离开 boundingRect 后如何删除 QGraphicsitems

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:00 25 4
gpt4 key购买 nike

我以为我可以使用下面的代码在它离开场景后删除任何项目,但事实并非如此。在尝试了不同的实现之后,我想我应该尝试另一种方法。有些 QGraphicsItems 实际上是在 boundingRect 之外开始的,所以我想知道是否有一种方法可以在它们通过某个坐标点后移除和删除 GraphicsItems。

void Scene::advance()
{
QList <QGraphicsItem *> itemsToRemove;
foreach( QGraphicsItem * item, this->items())
{

if( !this->sceneRect().intersects(item->boundingRect()))
{
// The item is no longer in the scene rect, get ready to delete it
itemsToRemove.append(item);
}

}

foreach( QGraphicsItem * item, itemsToRemove )
{
this->removeItem(item);
delete(item);
}

QGraphicsScene::advance();
}

最佳答案

问题出在这一行:-

 if( !this->sceneRect().intersects(item->boundingRect()))

这是将场景坐标中的场景矩形与项目局部坐标系中的项目边界矩形进行比较。

您需要转换其中之一,以便在同一坐标系内进行比较。

 QRectF itemSceneBoundingRect = item->mapRectToScene(item->boundingRect());
if( !this->sceneRect().intersects(itemSceneBoundingRect)
{
// remove the item.
}

关于c++ - 离开 boundingRect 后如何删除 QGraphicsitems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com