2011-05-17 63 views
1

是否有可能得到通知信號正在連接到某個插槽?Qt:當信號連接時得到通知

例如,我們有類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))); 

我希望把我的代碼調用被稱爲連接()的時候,所以我可以在服務器中註冊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()也不是虛擬的。

任何想法?謝謝。

回答

3

請參閱QObject中的connectNotify()虛擬方法,這是您應該重新實現的方法。

+0

謝謝!這正是我所期待的。 – user427569 2011-05-18 06:20:44