可以通过QObject::receivers()函数获取某个QObject对象的信号连接槽的个数,进而通过QObject::metaObject()函数和QMetaObject类获取信号和槽的信息,然后遍历所有槽函数,判断每个槽函数是否与B相关联即可。

以下是可能的实现方式:

QMetaObject::Connection connection = QObject::connect(&A, SIGNAL(anySignal()), &B, SLOT(anySlot()));
// 连接信号和槽

int slotCount = A.receivers(SIGNAL(anySignal()));
// 获取A对象的某个信号连接的槽函数个数

const QMetaObject* metaObject = A.metaObject();
// 获取A对象的元对象

for (int i = 0; i < slotCount; ++i) {
    const QMetaObject::Connection& connection = metaObject->connection(metaObject->indexOfSlot("anySlot()"));
    // 获取连接的Connection对象

    const QObject* receiver = connection.receiver();
    const QMetaObject* receiverMetaObject = receiver->metaObject();
    int slotIndex = receiverMetaObject->indexOfSlot(connection.slot());
    // 获取连接的槽函数信息

    if (receiver == &B) {
        qDebug() << "A's signal is connected to B's slot";
    }
}

注意,这只是一种可能的实现方式,具体实现可能会根据实际情况有所不同

有2个QObject叫A、B枚举出A的信号绑定了B的哪些槽

原文地址: https://www.cveoy.top/t/topic/hrzp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录