diff options
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
| -rw-r--r-- | src/corelib/kernel/qobject.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 374741cb754..0c84b53fe88 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3350,6 +3350,17 @@ bool QObject::disconnect(const QObject *sender, const char *signal, } } + auto getMethodIndex = [](int code, const QMetaObject *mo, QByteArrayView name, + const QArgumentTypeArray &types) { + switch (code) { + case QSLOT_CODE: + return QMetaObjectPrivate::indexOfSlot(mo, name, types); + case QSIGNAL_CODE: + return QMetaObjectPrivate::indexOfSignal(mo, name, types); + } + return -1; + }; + QByteArray pinnedMethod; bool method_found = false; if (method) { @@ -3396,8 +3407,7 @@ bool QObject::disconnect(const QObject *sender, const char *signal, } else { const QMetaObject *rmeta = receiver->metaObject(); do { - int method_index = QMetaObjectPrivate::indexOfMethod( - rmeta, methodName, methodTypes); + int method_index = getMethodIndex(membcode, rmeta, methodName, methodTypes); if (method_index >= 0) while (method_index < rmeta->methodOffset()) rmeta = rmeta->superClass(); |
