diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-06-30 16:17:26 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-06-30 18:11:17 +0000 |
commit | 55e56b72c0544e2c1d3ea61311529b9ca0850656 (patch) | |
tree | cbd5fd94479c1faad487b74dfd162dbb7050ef4b | |
parent | b7f6dbccd7ae50e19120a11a351f66fa7bbfce1d (diff) |
libpyside: Improve error message about using the wrong signal overload
Task-number: PYSIDE-1978
Change-Id: I912d4317bc639c5c597ab8259eef4ae389af04e6
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit a438c4d60f4913ea0db82cda0c419c26d557d0dd)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | sources/pyside6/libpyside/pysidesignal.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp index e4fbf96fc..86c256d36 100644 --- a/sources/pyside6/libpyside/pysidesignal.cpp +++ b/sources/pyside6/libpyside/pysidesignal.cpp @@ -559,21 +559,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; } |