【问题标题】:how to find an item in the scene如何在场景中找到物品
【发布时间】:2014-11-14 00:45:40
【问题描述】:

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

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

该项目没有被选中,所以我不能使用 scene()->selectedItem() 列表。

【问题讨论】:

    标签: c++ qt qgraphicsscene


    【解决方案1】:

    您可以检查调用QGraphicsItem::scene() 返回的指针。它将返回场景,如果场景中不存在,则返回 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
    }
    

    【讨论】:

    • 谢谢梅林。我测试了它。它工作正常.. 早些时候我试图检查场景::itemAt(pos) 并检查它的图形类型。现在它既简单又干净。再次感谢..
    • 我会在 5 分钟后接受答案。因为我现在不能接受。
    • 没问题,itemAt(pos) 对你不起作用,因为如果项目在场景中,那么你假设 pos 是你的项目所在的位置。如果它不在那个位置,它将返回 false,即使它可以在场景中。
    • 你是对的。现在我从你那里得到了更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多