aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-30 16:17:26 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-30 17:30:48 +0200
commita438c4d60f4913ea0db82cda0c419c26d557d0dd (patch)
treeab5b2af21c76fea914e77a953ab1d7a2b48e7284 /sources
parentac5837009960d0d92a8f48a70f3aab1a7b38a156 (diff)
libpyside: Improve error message about using the wrong signal overload
Pick-to: 6.3 Task-number: PYSIDE-1978 Change-Id: I912d4317bc639c5c597ab8259eef4ae389af04e6 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources')
-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;
}