Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Yegor от Декабрь 31, 2014, 17:00



Название: [РЕШЕНО] Сигнал QObject::destroyed(QObject*)
Отправлено: Yegor от Декабрь 31, 2014, 17:00
Здравствуйте, уважаемые форумчане!

Работаю в Qt 4.8.6.
Помогите мне, пожалуйста, разобраться с темой.

Сигнал объекта QObject непосредственно перед своим уничтожением посылает сигнал destroyed (QObject *).
В документации об этом сигнале пишется:
Цитировать
This signal is emitted immediately before the object obj is destroyed, and can not be blocked.

Что имеется ввиду под can not be blocked.?

И главное, что меня интересует. Если к этому сигналу подсоединить слот, в который будет передаваться тот указатель (QObject*) в качестве аргумента, то можно ли в слоте входить по указателю в объект и работать с его методами? Он до этого времени еще не уничтожиться?

То есть если сделать:
Код:
connect ( MyObject, SIGNAL ( destroyed ( QObject* ) ), this, SLOT ( onMyObjDeleted_slot ( QObject* ) ) );

...........................

...........................

MyDialog::onMyObjDeleted_slot ( QObject *pMyObj )
{
    pMyObj->method1();
    pMyObj->method2();
}

В этом случае не будет ошибки доступа к памяти?


Название: Re: Сигнал QObject::destroyed(QObject*)
Отправлено: Old от Декабрь 31, 2014, 17:39
Сигнал эмитется из деструктора QObject, т.е. деструкторы классов наследников уже отработали, поэтому использовать методы из разрушенных объектов не стоит. Ничем хорошим это не кончиться. :)


Название: Re: Сигнал QObject::destroyed(QObject*)
Отправлено: lit-uriy от Декабрь 31, 2014, 18:21
>>Что имеется ввиду под can not be blocked.?
Его нельзя заблокировать (обычно сигналы могут блокироваться с помощью bool QObject::blockSignals ( bool block ) )


Название: Re: Сигнал QObject::destroyed(QObject*)
Отправлено: Yegor от Январь 01, 2015, 11:29
Спасибо!