Название: Не могу отследить закрытие дочернего виджета Отправлено: star62 от Август 06, 2009, 19:18 Вопрос вот в чем, в приложении создается потомок:
class Histogram : public QWidget (простое окно) В его конструкторе есть такие строки Код: setAttribute(Qt::WA_DeleteOnClose); в главном приложении обрабатываю сигнал destroyed потомка И вот сдесь самое неожиданное (для меня), получив сигнал, основное прилождение виснет. Почему, не понимаю. Раньше был крупный проект с такой же функциональностью и все работало, здесь просто ума нериложу о причинах. Если connect на destroyed потомка убрать, все приходит в порядок, только вот мне надо знать когда дочернее окно будет закрыто пользователем. Помоги решить проблему. Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: Makss от Август 06, 2009, 21:53 Поставь фильтр(eventFilter) и лови событие QEvent::Close
Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: star62 от Август 07, 2009, 03:57 Поставь фильтр(eventFilter) и лови событие QEvent::Close Спасибо, решено. Но может кто объяснит причины поведения приложения в первоначальном варианте? Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: Rcus от Август 07, 2009, 06:00 Но может кто объяснит причины поведения приложения в первоначальном варианте? Интересно как там вообще обработывался этот сигнал, потому что сам по себе он не может ничего повесить, а вот если sender() преобразовывать к производному типу то вполне можно получить сегфолт, потому что destroyed() излучается в деструкторе QObject.Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: star62 от Август 07, 2009, 08:54 Интересно как там вообще обработывался этот сигнал, потому что сам по себе он не может ничего повесить, а вот если sender() преобразовывать к производному типу то вполне можно получить сегфолт, потому что destroyed() излучается в деструкторе QObject. Обработка буквально две строки: Код: checkBox_ish_hist->setChecked(false); ish_data_hist указатель на объект который только что был уничтожен (т.к. от него пришел destroyed()) Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: SASA от Август 07, 2009, 19:09 ish_data_hist = NULL; Замечание. Пользуйся QPointer.ish_data_hist указатель на объект который только что был уничтожен (т.к. от него пришел destroyed()) Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: star62 от Август 10, 2009, 05:40 ish_data_hist = NULL; Замечание. Пользуйся QPointer.ish_data_hist указатель на объект который только что был уничтожен (т.к. от него пришел destroyed()) В чем преимущество? Если не сложно крательно черкануть. Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: SASA от Август 10, 2009, 11:47 ish_data_hist = NULL; Замечание. Пользуйся QPointer.ish_data_hist указатель на объект который только что был уничтожен (т.к. от него пришел destroyed()) В чем преимущество? Если не сложно крательно черкануть. Код: QPointer<MyObject> po = new MyObject(); В асистанте очень подробно всё расписанно. Название: Re: Не могу отследить закрытие дочернего виджета Отправлено: star62 от Август 11, 2009, 04:36 Указатель занулится автоматически при удалении объекта. Код: QPointer<MyObject> po = new MyObject(); Я проверял этот функционал давненько, он у меня не сработал. Поэтому по привычке продолжал. Думаю до сего момента, теперь буду перестраиваться. |