C++ 如何在场景中查找项目

C++ 如何在场景中查找项目,c++,qt,qgraphicsscene,C++,Qt,Qgraphicsscene,如何在场景中找到特定项目并将其删除。 我已经声明了一个graphicsitem并将其添加到场景中。现在,在某些情况下,我必须从场景中删除该项目,但在从场景中删除该项目之前,我想知道该项目是否已添加到场景中。如果尝试删除未添加到场景中的项目,则会出现以下错误: "QGraphicsScene::removeItem: item 0x121c520's scene (0x0) is different from this scene (0x1143850)" 该项目未选中,因此我无法使用scene

如何在场景中找到特定项目并将其删除。 我已经声明了一个graphicsitem并将其添加到场景中。现在,在某些情况下,我必须从场景中删除该项目,但在从场景中删除该项目之前,我想知道该项目是否已添加到场景中。如果尝试删除未添加到场景中的项目,则会出现以下错误:

"QGraphicsScene::removeItem: item 0x121c520's scene (0x0) is different from this scene (0x1143850)"

该项目未选中,因此我无法使用scene()->selectedItem()列表

您可以检查调用返回的指针。它将返回场景,如果场景中不存在,则返回NULL

// assuming item is a class derived from QGraphicsItem
if(item->scene() != nullptr) // nullptr from C++ 11, else use NULL
{
    // item is in a scene
}

谢谢梅林。我测试过了。它运转良好。。之前我试着检查scene::itemAt(pos)并检查它的图形类型。现在它很简单而且干净。再次感谢..我会在5分钟后接受答案。因为我现在不能接受。没问题,itemAt(pos)不会为您工作,因为如果项目在场景中,那么您假设pos是项目所在的位置。如果它不在那个位置,它将返回false,即使它可能在场景中。你是对的。现在我从你那里得到了一个更好的解决方案。