Как и jpalecek , указано, что вам не хватает файла заголовка. Вы должны принять его ответ. Я просто собираюсь указать на две потенциальные проблемы:
Прежде всего, вам не нужно звонить QGraphicsScene::removeItem()
. QGraphicsItem::~QGraphicsItem()
делает это для вас.
Во-вторых. Будьте осторожны, если вы положите какие-либо QGraphicsItem
внутрь других. То есть у вас есть предметы, которые являются детьми других предметов. Деструктор QGraphicsItem
автоматически удаляет всех его потомков. Поэтому, когда вы просматриваете элементы, возвращенные из QGraphicsScene
, вы можете в конечном итоге удалить дочерний элемент, который уже был удален его родителем. Например, скажем, у вас есть 2 элемента, A и B, а B является дочерним элементом для A. Когда вы удаляете A, B удаляется автоматически. И тогда вы попадаете в B и пытаетесь удалить его. БУМ!
Более безопасный способ сделать это - проверить, является ли предмет верхнего уровня, то есть у него нет родителя:
QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
QGraphicsItem *gi = all[i];
if(gi->parentItem()==NULL) {
delete gi;
}
}