Удалить QGraphicsPixMapItem (с помощью setParentItem) - PullRequest
0 голосов
/ 06 мая 2019

Так что у меня проблемы с удалением QGraphicsPixMapItem. Я добавляю его в свое представление, устанавливая его родительский, так что я ожидал, что если я изменю родителя на nullptr, он будет удален, но он не сработает. Я читал в Интернете, что я мог бы также использовать функции, такие как скрыть, но когда я использую их, программа вылетает. Какой лучший способ исправить это?

Кстати, я уверен, что код вызывает сбой при вызове функции скрытия, а остальная часть моего кода исправна.

Левый щелчок должен добавить 'stamlid' (QGraphicsPixMapItem) к QGraphicsEllipsItem (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();
    }
}

1 Ответ

0 голосов
/ 06 мая 2019

Документация Qt для базового класса QGraphicsItem объясняет, что установка родительского элемента в 0 не удаляет элемент, а делает его элементом верхнего уровня.

Возможно, вам следует получить сцену элемента и использовать ее для удаления элемента.

if (m_stamlid->scene())
    m_stamlid->scene()->removeItem(m_stamlid);
delete m_stamlid;
m_stamlid = nullptr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...