可以使用QMetaObject::indexOfMethod和QMetaObject::method来获取sender的信号对应的方法索引,然后遍历reciever的所有槽函数,使用QMetaObject::indexOfMethod和QMetaMethod::methodSignature来获取槽函数的方法索引和方法签名,比较槽函数的方法签名是否与sender的信号对应的方法签名相同,如果相同则说明该槽函数与sender的信号绑定。具体实现如下:

void enumSlot(QObject* reciever, QObject* sender, const QString& signName) { const QMetaObject* senderMetaObj = sender->metaObject(); int signIndex = senderMetaObj->indexOfSignal(qPrintable(signName)); if (signIndex == -1) { qWarning() << "Invalid signal name: " << signName; return; } QMetaMethod signMethod = senderMetaObj->method(signIndex); QByteArray signSignature = signMethod.methodSignature();

const QMetaObject* recieverMetaObj = reciever->metaObject();
for (int i = 0; i < recieverMetaObj->methodCount(); ++i) {
    QMetaMethod method = recieverMetaObj->method(i);
    if (!method.isValid() || !method.methodType() == QMetaMethod::Slot) {
        continue;
    }
    QByteArray methodSignature = method.methodSignature();
    if (methodSignature == signSignature) {
        qDebug() << "Slot found: " << recieverMetaObj->className() << "::" << method.name();
    }
}
已知sender和reciever的关系是QObjectconnectsender &SendermySignal receiver &ReceivermySlot;QObjectconnectsender &SendermySignal receiver &ReceivermySlot2;请实现一个函数enmuSlotQObject reciever QObject sender const Q

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

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