Tôi đã viết một lớp dẫn xuất từ QGraphicsScene
. Tại một thời điểm tôi cần phải loại bỏ tất cả các mục từ hiện trường và tôi muốn các mục bị phá hủy vật lý (destructor gọi là). Tôi đã thử những điều sau đây:Cách xóa tất cả QGraphicsItem khỏi QGraphicsScene
QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
QGraphicsItem *gi = all[i];
removeItem(gi);
delete gi; // warning at this line
}
Qt Creator phát hiện cảnh báo: C4150: xóa con trỏ thành loại không đầy đủ 'QGraphicsItem'; không có destructor gọi là
Tôi không chắc tại sao lại như thế. QGraphicsItem
có trình phá hủy ảo nên các mục sẽ bị xóa khỏi bộ nhớ.
Nếu đây không phải là cách phù hợp, làm thế nào tôi có thể xóa tất cả QGraphicsItem
s từ QGraphicsScene
? Lưu ý rằng tôi biết khi nào cảnh bị xóa, tất cả các mục cũng sẽ bị xóa. Nhưng tôi muốn xóa các mục khỏi cảnh và vẽ các mục khác. Tôi muốn xóa các mục đã xóa khỏi bộ nhớ.