信号がスロットに接続されているという通知を受け取ることはできますか?
たとえば、クラス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()を再実装して、indexOfSignal()が再実装されたカスタムQMetaObjectサブクラスを返すこともできますが、これも不可能であり、indexOfSignal()も仮想ではありません。
何か案は?ありがとう。