有2个QObject叫A、B枚举出A的信号绑定了B的哪些槽
可以通过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";
}
}
注意,这只是一种可能的实现方式,具体实现可能会根据实际情况有所不同
原文地址: https://www.cveoy.top/t/topic/hrzp 著作权归作者所有。请勿转载和采集!