Невозможно безопасно перебрать список соединений с сигнальными слотами, не удерживая внутренние мьютексы / семафоры Qt. Сигналы и слоты могут приходить и уходить в любое время, так что в лучшем случае вы получите список, который не гарантированно будет правильным - и, следовательно, бесполезным.
Что бы вы ни делали в QObject::connect
, этого недостаточно. Данные, которые вы получаете от таких хуков, будут страдать от следующего:
У вас могут быть указатели на объекты, которые уже удалены к тому времени, когда вы пытаетесь получить к ним доступ. Вы можете уменьшить это, используя QPointer
, но это работает только для объектов, которые живут в потоке, в котором вы выполняете свой код. Вам нужно добавить ваш объект в другие потоки, чтобы собрать там списки объектов.
У вас могут быть соединения, которых больше нет. Даже перехват QObject::disconnect
будет недостаточным, так как соединения удаляются, когда объекты перестают существовать.
Проблема, с которой вы сталкиваетесь, довольно сложна, и любое надежное решение не может быть ограничено просто «подключением» QObject::connect
.
Увы, вы не сказали почему вам нужен список сигналов, которые прикрепляются к слоту. Какова цель этого?