首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除QGraphicsPixMapItem (通过setParentItem)

删除QGraphicsPixMapItem (通过setParentItem)
EN

Stack Overflow用户
提问于 2019-05-06 21:37:55
回答 1查看 75关注 0票数 0

因此,我在删除QGraphicsPixMapItem时遇到了问题。我通过设置它的父项将它添加到我的视图中,所以我希望如果我将父项更改为nullptr,它将被删除,但它不起作用。我在网上读到我也可以使用像hide这样的函数,但是当我使用这些函数时,程序就崩溃了。解决这个问题的最好方法是什么?

顺便说一句,我确信当我调用hide函数时,代码会崩溃,而我剩下的代码是正常的。

单击鼠标左键应该会在QGraphicsEllipsItem (QGraphicsPixMapItem)中添加一个'stamlid‘(this)。并且应该通过右键单击将其删除。

代码语言:javascript
复制
void Vakje::mousePressEvent(QGraphicsSceneMouseEvent *event) {
    Speler *speler = m_spel->getAanDeBeurt();
    if (event->button() == Qt::LeftButton && m_stamlid == nullptr) {
        m_stamlid = speler->getVrijeStamleden()[0]; //stamlid van speler dat niet op bord staat
        m_stamlid->getStamlidView()->setParentItem(this);
        m_stamlid->setOpBord(true);
        m_stamlid->getStamlidView()->setVisible(true);
        speler->getSpelerView()->updateMembers();

    } else if (event->button() == Qt::RightButton && m_stamlid != nullptr) { //verwijder pion
        m_stamlid->setOpBord(false);
        m_stamlid->getStamlidView()->setParentItem(nullptr);
        m_stamlid = nullptr;
        speler->getSpelerView()->updateMembers();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-06 22:23:06

基类QGraphicsItem的Qt文档解释说,将父项设置为0并不会删除该项,而是使其成为顶级项。

也许你应该做的是获取项目的scene并使用它来remove该项目。

代码语言:javascript
复制
if (m_stamlid->scene())
    m_stamlid->scene()->removeItem(m_stamlid);
delete m_stamlid;
m_stamlid = nullptr;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56006411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档