Qt: получать уведомления при подключении сигнала - PullRequest
1 голос
/ 17 мая 2011

Можно ли получить уведомление о подключении сигнала к какому-либо слоту?

Например, у нас есть класс Foo:

class Foo : public QObject
{
    Q_OBJECT

...
signals:
    void fooChanged(int bar);
};

И где-то кто-то подключает его:

Foo *foo = new Foo;
connect(foo, SIGNAL(fooChanged(int)),
        other, SLOT(setFoo(int)));

Я хотел бы, чтобы мой код вызывался при вызове connect (), чтобы я мог зарегистрировать Foo на сервере для получения сетевых событий, которые будут вызывать передачу сигнала.Таким образом, я мог просто подключить сигнал, и отправитель автоматически зарегистрировался бы на сервере, чтобы получить требуемые события, которые были бы намного менее подвержены ошибкам, чем требование ручной регистрации.Например, я мог бы переопределить connect ():

bool Foo::connect(QObject *sender, const char *signal, QObject *receiver, const char *slot,...)
{
    // do something here, such as requesting a server to receive events that will cause the signal to be emitted
    return QObject::connect(sender, signal, receiver, slot);
}

К сожалению, это не будет работать, если используется статический QObject :: connect ().Или я мог бы переопределить QObject :: metaObject (), чтобы вернуть пользовательский подкласс QMetaObject, где indexOfSignal () переопределён, но это также не представляется возможным, и indexOfSignal () также не виртуален.Спасибо.

1 Ответ

3 голосов
/ 18 мая 2011

Смотрите виртуальный метод connectNotify () в QObject, это тот, который вы должны переопределить.

...