Qt:连接信号时收到通知

时间:2011-05-17 11:25:12

标签: qt signals-slots qobject

是否可以通知某个信号正连接到某个插槽?

例如,我们有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 个答案:

答案 0 :(得分:3)

请参阅QObject中的connectNotify()虚拟方法,这是您应该重新实现的方法。