Може би интерпретирам документите по различен начин от вас (не съм погледнал източника):
QGraphicsItem::~QGraphicsItem () [virtual]
Унищожава QGraphicsItem и всички негови деца. Ако този елемент в момента е свързан със сцена, елементът ще бъде премахнат от сцената, преди да бъде изтрит.
Забележка: По-ефективно е да премахнете елемента от QGraphicsScene, преди да унищожите елемента.
Приемам, че това означава, че първо ще го премахне от сцената, преди да го унищожи, защото това е по-ефективно. Но ако кажете, че източникът никъде не посочва, че това се случва, тогава изглежда, че документите ще бъдат неверни?
Ако трябваше да направя предположение защо би било по-ефективно първо да премахна елемента, преди да го унищожа (независимо дали API наистина го прави вместо вас в деструктора), бих си помислил, че ще трябва да се направи с това какво задейства сцената за преиндексиране. Може би чрез изтриване на елемент, който все още е в сцената, каскадните изтривания на дъщерни елементи постоянно ще задействат повторно индексиране на сцената. Докато, ако трябва да премахнете елемента първо, той може ефективно да изтегли цялата йерархия по начин, който изисква само едно актуализиране на сцената, а след това може да се случи нормалното изтриване, без да го засяга допълнително? Възможно е дори да има повече каскадни ефекти от други дъщерни събития/сигнали, докато те се изтриват в рамките на сцената.
Обзалагам се, че логиката зад „Забележката“ е да информира тези, които биха подкласили QGraphicsItem и претоварили деструктора, за да имат предвид необходимостта първо да премахнат от сцената.
person
jdi
schedule
02.05.2012