| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Removing QGraphicsItem... |
| Автор: pan2004 24.12.2008, 21:08 | ||||
| Чтото не нашел в Qtшной справке нормального объяснения, как удаляются итемы со сцены... С одной стороны, в описании деструктора QGraphicsItem написано, что он должен автоматически удалять итем со сцены, где он находится. Но прямое(deleteLater отсутствует?)
завершается, конечно же, окошком "программа выполнила недопустимую ...". Убрать итем можно функцией
Вопрос в том, нужен ли этот delete? Итем уже не принадлежит сцене, и никогда больше не станет видимым, но она явно не хочет удалять его сама(намечается утечка памяти...)... Кроме того, программа все равно рушится, но видимо только в том случае, если у удаляемого итема есть childItems(почему?! ПС Все объекты находятся изначально в "куче". Класс итема самописный. ППС Но насколько я понимаю, если удаляешь объект сцены, она должна удалить все свои итемы самостоятельно? Qt 4.4.3 |
| Автор: SABROG 24.12.2008, 21:34 |
| Случаем не в event'e удаляешь ? |
| Автор: pan2004 24.12.2008, 21:41 | ||||||
Разве что косвенно. функция, в которой все это происходит, вызывается как реакция на сигнал QAction::triggered(). Вылет происходит не сразу, во время paintEvent()а Добавлено через 6 минут и 39 секунд Btw нашел тока что в исходниках QGraphicsScene::removeItem:
При этом в справке:
)вот и верь после этого людям... Главный вопрос остается открытым |
| Автор: pan2004 25.12.2008, 12:16 |
| вопрос решен. Проблема была в отсутствии вызова prepareGeometryChange() в паре мест. После добавления этой функции, все странности прекратились |