因此,我在删除QGraphicsPixMapItem时遇到了问题。我通过设置它的父项将它添加到我的视图中,所以我希望如果我将父项更改为nullptr,它将被删除,但它不起作用。我在网上读到我也可以使用像hide这样的函数,但是当我使用这些函数时,程序就崩溃了。解决这个问题的最好方法是什么?
顺便说一句,我确信当我调用hide函数时,代码会崩溃,而我剩下的代码是正常的。
单击鼠标左键应该会在QGraphicsEllipsItem (QGraphicsPixMapItem)中添加一个'stamlid‘(this)。并且应该通过右键单击将其删除。
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();
}
}发布于 2019-05-06 22:23:06
基类QGraphicsItem的Qt文档解释说,将父项设置为0并不会删除该项,而是使其成为顶级项。
也许你应该做的是获取项目的scene并使用它来remove该项目。
if (m_stamlid->scene())
m_stamlid->scene()->removeItem(m_stamlid);
delete m_stamlid;
m_stamlid = nullptr;https://stackoverflow.com/questions/56006411
复制相似问题