diff options
author | Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2019-01-08 17:15:24 +0100 |
---|---|---|
committer | Cristián Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2019-07-04 17:21:03 +0200 |
commit | 1b77fc5931bf14b2a9e936a8d08334d9e00ffe7e (patch) | |
tree | aea75020efaee5743a485f47f6ac7ff123c8a2af /sources/pyside2/libpyside/dynamicqmetaobject.cpp | |
parent | 8fa674375a3ea5609ffe8dadeb697915347a4072 (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.cpp | 13 |
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); + } + } } } } |