Как я могу узнать, какой слот был подключен к моему сигналу? - PullRequest
0 голосов
/ 01 февраля 2019

Использование Qt 5.11.Переопределив QObject::connectNotify, я могу получать уведомления, если к моему сигналу подключен слот:

    void connectNotify(const QMetaMethod &signal) override {
        if (signal == QMetaMethod::fromSignal(&PromiseBase::resolved()) && isResolved()) {
            // Here, I want to call the slot immediately.
        }
    }

Когда это происходит, я хочу немедленно вызвать слот - и только этот слотне все другие слоты, которые могут быть подключены к сигналу. Как я могу это сделать? Каркас Qt дает мне сигнал, но не слот.

Контекст: я работаю над классом Promise, похожим на Обещания JavaScript .Ожидается, что подключение слота к сигналу resolved всегда вызовет слот ровно один раз, независимо от того, было ли обещание выполнено или все еще ожидает ответа.

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

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Как объяснено в этом ответе , это не простая задача.В зависимости от вашей ситуации может быть достаточно какого-то крючкового механизма.

0 голосов
/ 01 февраля 2019

У вас есть функция

int QObject::receivers ( const char * signal ) const [protected]

Возвращает количество приемников, подключенных к сигналу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...