【问题标题】:Qt: Get notified when a signal is connectedQt:连接信号时得到通知
【发布时间】:2011-05-17 11:25:11
【问题描述】:

是否有可能收到信号正在连接到某个插槽的通知?

例如,我们有 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() 也不是虚拟的。

有什么想法吗?谢谢。

【问题讨论】:

    标签: qt signals-slots qobject


    【解决方案1】:

    参见 QObject 中的 connectNotify() 虚方法,这是你应该重新实现的。

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多