У меня есть класс C, который излучает сигнал S. S может быть подключен к нулю, к одному или нескольким приемникам (R) (количество соединений меняется со временем, а соединения w выполняются приемниками).
C должен что-то делать, когда число слушателей S становится больше нуля, и делать что-то еще, когда число слушателей на S возвращается к нулю.
Я думал, что могу использовать:
connectNotify()
и
disconnectNotify()
ну, ...
Что я замечаю, так это то, что функция connectNotify () работает хорошо, но функция disnectNotify () не вызывается(в классе C), когда принимающий объект уничтожен.Он вызывается только тогда, когда используется явное разъединение с использованием disconnect ().
Добавление явного разъединения в деструкторе слушателей также оказалось не очень успешным: возникла ошибка сегментации при выходе из всего приложения.(Я думаю, что не очень хорошо пытаться использовать метод connect (), когда все идет не так.)
Я пытался использовать сигнал destroy (), отправляемый от экземпляров R к C, когда R уничтожается: Это работает, но как я могу быть уверен, что R был подключен во время уничтожения?(Приемники R могут существовать в неподключенном состоянии):
В классе C слот X (вызываемый при получении destroy () R), проверяя QObject :: receivers (), похоже, возвращает числоприемники до уничтожения не производится.Поскольку я не знаю, был ли объект уничтожен связан, я застрял!
Есть идеи?