Нужно ли мне еще отключать лямбду от сигнала в Qt5.5?

В ранних версиях Qt 5 мне приходилось отключать лямбды от сигналов, как показано здесь: «Отключение лямбда-функций в Qt5».

Вот Я нашел следующее утверждение:
Нет автоматического отключения, когда «получатель» уничтожен, потому что это функтор без QObject. Однако начиная с версии 5.2 существует перегрузка, которая добавляет «объект контекста». Когда этот объект уничтожается, соединение разрывается (контекст также используется для сходства потока: лямбда будет вызываться в потоке цикла событий объекта, используемого в качестве контекста).

  • Значит ли это, что мне больше не нужно отключать лямбды с помощью Qt5.2 или новее?
  • Нужно ли передавать этот контекст или это делается автоматически?

7

Решение

Qt автоматически удаляет все соединения с или с объектом, когда он уничтожается через QObject :: ~ QObject (). Таким образом, если вы создаете соединение с лямбдой, когда отправляющий объект удаляется, соединение автоматически очищается. Вы не отключили и ранее не нуждались в этом самостоятельно.

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

В итоге: Вам не нужно вручную отключать лямбды, они очищаются автоматически. Вы можете использовать объекты контекста, чтобы удалить соединение до того, как объект отправителя будет уничтожен.

10

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]