Вопрос по – Сигналы в Qt автоматически отключаются при удалении одного из классов

40

Qt автоматически удаляет соединения между объектами, когда одна из сторон удаляется?

напримерconnect (A .. , B ..) Когда A (указатель) удаляется или B удаляется, будет ли соединение разорвано?

Нужно ли явно использовать отключение в деструкторе?

Ваш Ответ

1   ответ
35

QObject::~QObject Деструктор позаботится об этом:

All signals to and from the object are automatically disconnected, and any pending posted events for the object are removed from the event queue.
However, it is often safer to use deleteLater() rather than deleting a QObject subclass directly.

Будьте осторожны, хотя:

Warning: Deleting a QObject while pending events are waiting to be delivered can cause a crash. You must not delete the QObject directly if it exists in a different thread than the one currently executing. Use deleteLater() instead, which will cause the event loop to delete the object after all pending events have been delivered to it.

@mBardos, начиная с Qt 5.2, существует перегрузка, которая принимает объект контекста. Соединение с лямбдой будет разорвано при удалении объекта контекста.
также будьте осторожны с лямбдами (если вы их используете) в удаленном объекте: они НЕ отключены ... угадайте, насколько я знаю;)
@RegularlyScheduledProgramming Я все еще на 5.1.1, но могу сказать одно: это было необходимо! ;)
Это верно и в Qt5.
Также обратите внимание на следующее: & quot; Предупреждение. Удаление объекта QObject во время ожидания ожидающих событий может привести к сбою. & Quot; использованиеdeleteLater() если такая ситуация может возникнуть.

Похожие вопросы