aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/libpyside/dynamicqmetaobject.cpp
diff options
context:
space:
mode:
authorCristian Maureira-Fredes <cristian.maureira-fredes@qt.io>2019-01-08 17:15:24 +0100
committerCristián Maureira-Fredes <cristian.maureira-fredes@qt.io>2019-07-04 17:21:03 +0200
commit1b77fc5931bf14b2a9e936a8d08334d9e00ffe7e (patch)
treeaea75020efaee5743a485f47f6ac7ff123c8a2af /sources/pyside2/libpyside/dynamicqmetaobject.cpp
parent8fa674375a3ea5609ffe8dadeb697915347a4072 (diff)
Add support for parameterNames in Signals
There were many uses cases when a proper interaction between Python and Qml was needed, one of them was the case to emit signals from Python an get those values via an argument name in QML. A simple example describing this situation can be found in PYSIDE-634: Python: sumResult = Signal(int, arguments=["sum"]) sumResult.emit(42) Qml: onSumResult: console.log(sum) // will print 42 A test case based on the same example was added. Change-Id: I0908f97d88eaadc0c02d81bc4daca936f72f6c6a Fixes: PYSIDE-634 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside2/libpyside/dynamicqmetaobject.cpp')
-rw-r--r--sources/pyside2/libpyside/dynamicqmetaobject.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/sources/pyside2/libpyside/dynamicqmetaobject.cpp b/sources/pyside2/libpyside/dynamicqmetaobject.cpp
index c5de54aa0..857d242a2 100644
--- a/sources/pyside2/libpyside/dynamicqmetaobject.cpp
+++ b/sources/pyside2/libpyside/dynamicqmetaobject.cpp
@@ -467,8 +467,17 @@ void MetaObjectBuilderPrivate::parsePythonType(PyTypeObject *type)
data->data->signalName = Shiboken::String::toCString(key);
for (const auto &s : data->data->signatures) {
const auto sig = data->data->signalName + '(' + s.signature + ')';
- if (m_baseObject->indexOfSignal(sig) == -1)
- m_builder->addSignal(sig);
+ if (m_baseObject->indexOfSignal(sig) == -1) {
+ // Registering the parameterNames to the QMetaObject (PYSIDE-634)
+ // from:
+ // Signal(..., arguments=['...', ...]
+ // the arguments are now on data-data->signalArguments
+ if (!data->data->signalArguments->isEmpty()) {
+ m_builder->addSignal(sig).setParameterNames(*data->data->signalArguments);
+ } else {
+ m_builder->addSignal(sig);
+ }
+ }
}
}
}