diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-09-30 11:04:49 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-10-01 13:44:04 +0200 |
| commit | f3ebe9b044100826214741963459c837ac114723 (patch) | |
| tree | b2645aa03a31357e4d3be82909cb448afff086f8 /sources/pyside6/libpyside/dynamicqmetaobject.cpp | |
| parent | e6b19eb54a54fc24520db9449efa1ab43a6863c4 (diff) | |
Fix handling type with equal names in signal/slot
The decision whether to create a derived meta object class parsed from
the Python type in MetaObjectBuilder was based on comparing the class
name to the base meta object (the Python parsing must not be done
when creating a meta object for a plain wrapped Qt type).
This led to mixups when base class names were identical which is
possible in Python.
To fix this, split apart the code path not requiring Python type
parsing (called from the wrapper code when initializing wrapped Qt
classes) and expand the code for Python derived classes into
initQObjectSubType().
Fixes: PYSIDE-3201
Pick-to: 6.10
Change-Id: Id62e7dc9b8af16154b161cdbf5dd0d460c55f6f1
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/dynamicqmetaobject.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/dynamicqmetaobject.cpp | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.cpp b/sources/pyside6/libpyside/dynamicqmetaobject.cpp index f3878b6e1..6bb9d162e 100644 --- a/sources/pyside6/libpyside/dynamicqmetaobject.cpp +++ b/sources/pyside6/libpyside/dynamicqmetaobject.cpp @@ -102,29 +102,21 @@ QMetaObjectBuilder *MetaObjectBuilderPrivate::ensureBuilder() return m_builder; } -MetaObjectBuilder::MetaObjectBuilder(const char *className, const QMetaObject *metaObject) : - m_d(new MetaObjectBuilderPrivate) +MetaObjectBuilder::MetaObjectBuilder(const QMetaObject *metaObject) + : m_d(new MetaObjectBuilderPrivate) { m_d->m_baseObject = metaObject; - m_d->m_builder = new QMetaObjectBuilder(); - m_d->m_builder->setClassName(className); - m_d->m_builder->setSuperClass(metaObject); - m_d->m_builder->setClassName(className); } +// Parse the type in case of a Python class inheriting a Qt class. MetaObjectBuilder::MetaObjectBuilder(PyTypeObject *type, const QMetaObject *metaObject) : m_d(new MetaObjectBuilderPrivate) { m_d->m_baseObject = metaObject; - const char *className = PepType_GetNameStr(type); - // Different names indicate a Python class inheriting a Qt class. - // Parse the type. - if (std::strcmp(className, metaObject->className()) != 0) { - m_d->m_builder = new QMetaObjectBuilder(); - m_d->m_builder->setClassName(className); - m_d->m_builder->setSuperClass(metaObject); - m_d->parsePythonType(type); - } + m_d->m_builder = new QMetaObjectBuilder(); + m_d->m_builder->setClassName(PepType_GetNameStr(type)); + m_d->m_builder->setSuperClass(metaObject); + m_d->parsePythonType(type); } MetaObjectBuilder::~MetaObjectBuilder() |
