aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside6/libpyside/pysidesignal.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp
index 4d90013b1..30eab1080 100644
--- a/sources/pyside6/libpyside/pysidesignal.cpp
+++ b/sources/pyside6/libpyside/pysidesignal.cpp
@@ -523,21 +523,28 @@ static PyObject *signalInstanceEmit(PyObject *self, PyObject *args)
static PyObject *signalInstanceGetItem(PyObject *self, PyObject *key)
{
- auto data = reinterpret_cast<PySideSignalInstance *>(self);
- const auto sigName = data->d->signalName;
+ auto *firstSignal = reinterpret_cast<PySideSignalInstance *>(self);
+ const auto &sigName = firstSignal->d->signalName;
const auto sigKey = PySide::Signal::parseSignature(key);
const auto sig = PySide::Signal::buildSignature(sigName, sigKey);
- while (data) {
+ for (auto *data = firstSignal; data != nullptr; data = data->d->next) {
if (data->d->signature == sig) {
PyObject *result = reinterpret_cast<PyObject *>(data);
Py_INCREF(result);
return result;
}
- data = data->d->next;
}
- PyErr_Format(PyExc_IndexError, "Signature %s not found for signal: %s",
- sig.constData(), sigName.constData());
+ // Build error message with candidates
+ QByteArray message = "Signature \"" + sig + "\" not found for signal: \""
+ + sigName + "\". Available candidates: ";
+ for (auto *data = firstSignal; data != nullptr; data = data->d->next) {
+ if (data != firstSignal)
+ message += ", ";
+ message += '"' + data->d->signature + '"';
+ }
+
+ PyErr_SetString(PyExc_IndexError, message.constData());
return nullptr;
}