Название: Signal destroyed() и sender() в слоте Отправлено: Fregloin от Январь 23, 2014, 12:57 Как лучше сделать так, что бы один объект знал об удалении второго и подчищал все что с ним связано.
Код: class CViewToModelLink : public QObject Суть в том, что раньше руками везде я указывал при удалении объекта railObject для объекта CViewToModelLink стереть указатель на него. Решил переделать на сигнал/слоты. И вот при сигнале destroyed() при удалении railObject я не могу узнать какой объект удалился. точнее я не могу его привести с нужному типу. Или на момент посылки сигнала destroyed() все деструкторы вызваны, и преобразования к наследуемому типу уже невозможно? Название: Re: Signal destroyed() и sender() в слоте Отправлено: Old от Январь 23, 2014, 13:11 Или на момент посылки сигнала destroyed() все деструкторы вызваны, и преобразования к наследуемому типу уже невозможно? На сколько я помню да, сигнал destroyed посылается из деструктора QObjetc, когда деструкторы наследников уже отработали.Название: Re: Signal destroyed() и sender() в слоте Отправлено: Swa от Январь 23, 2014, 13:31 Или на момент посылки сигнала destroyed() все деструкторы вызваны, и преобразования к наследуемому типу уже невозможно? Да.Но так как у вас со слотом destroyRailObjectHandler соединяется сигнал только одного объекта, зачем делать каст? Это можно обойти если в классе CRailObject воздать свой сигнал, например Код: signals: Название: Re: Signal destroyed() и sender() в слоте Отправлено: Fregloin от Январь 23, 2014, 13:35 это я так и понял, что можно вызывать из деструктора свой сигнал.
по поводу каста, помимо этого объекта, есть еще хеш с другими объектами. и при удалении одного из них, нужно убрать указатель из хеша... но я сделал через static_cast Код: void CViewToModelLink::destroyViewItemHandler() |