aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-30 16:17:26 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-06-30 18:11:17 +0000
commit55e56b72c0544e2c1d3ea61311529b9ca0850656 (patch)
treecbd5fd94479c1faad487b74dfd162dbb7050ef4b
parentb7f6dbccd7ae50e19120a11a351f66fa7bbfce1d (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.cpp19
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;
}