РР
4 июня 2019 г. 22:14

Самоуничтожение объектов на графической сцене

Qt, qt, QGraphicItem, QGraphicsScene

Мне нужно чтобы созданные объекты сами по себе удалялись со сцены, по таймеру. То есть без взаимодействия с ними. Как это можно реализовать? Есть код для удаления с взаимодействием (приложен), а вот как сделать чтобы без - ничего не могу придумать.

  1. void Widget::slotDeletePeel(QGraphicsItem *item)
  2. {
  3. foreach (QGraphicsItem *peel, peels)
  4. {
  5. if(peel==item)
  6. {
  7. scene->removeItem(peel);
  8. peels.removeOne(peel);
  9. delete peel;
  10. ui->lcdNumber->display(count--);
  11. }
  12. }
  13. }
2

Вам это нравится? Поделитесь в социальных сетях!

1
Evgenii Legotckoi
  • 5 июня 2019 г. 13:51

Вам бы наследоваться от QObject дополнительно, добавить в ваш класс QTimer. Можно создать его на стеке, просто объявив в заголовочном файле так

  1. QTimer m_timer;

также добавить сигнал

  1. void deleteMe(QGraphicsItem* item);

Подключить этот сигнал к сигналу от таймера

  1. connect(&m_timer, &QTimer::timeout, this, [this](){ emit deleteMe(this)});

Запустить данный таймер тогда, когда вам потребуется

  1. m_timer.start();

А когда создаёте объект вашего класса QGraphicsItem, то сразу подключайте этот сигнал deleteMe к вашему методу для уничтожения объектов slotDeletePeel .

Пример наследование от QGraphicsItem и QObject есть в этой статье , либо можете сразу использовать QGraphicsObject

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь