diff options
Diffstat (limited to 'sources/pyside6')
-rw-r--r-- | sources/pyside6/libpyside/pysidevariantutils.cpp | 8 | ||||
-rw-r--r-- | sources/pyside6/tests/QtWidgets/qgraphicsobjectreimpl_test.py | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/sources/pyside6/libpyside/pysidevariantutils.cpp b/sources/pyside6/libpyside/pysidevariantutils.cpp index 7dbfb3afc..729557919 100644 --- a/sources/pyside6/libpyside/pysidevariantutils.cpp +++ b/sources/pyside6/libpyside/pysidevariantutils.cpp @@ -125,8 +125,12 @@ QMetaType resolveMetaType(PyTypeObject *type) // PYSIDE-1887, PYSIDE-86: Skip QObject base class of QGraphicsObject; // it needs to use always QGraphicsItem as a QVariant type for // QGraphicsItem::itemChange() to work. - if (qstrcmp(typeName, "QGraphicsObject*") == 0) - ++i; + if (qstrcmp(typeName, "QGraphicsObject*") == 0 && size > 1) { + auto *firstBaseType = reinterpret_cast<PyTypeObject *>(PyTuple_GetItem(type->tp_bases, 0)); + const char *firstBaseTypeName = Shiboken::ObjectType::getOriginalName(firstBaseType); + if (firstBaseTypeName != nullptr && qstrcmp(firstBaseTypeName, "QObject*") == 0) + ++i; + } for ( ; i < size; ++i) { auto baseType = reinterpret_cast<PyTypeObject *>(PyTuple_GetItem(type->tp_bases, i)); const QMetaType derived = resolveMetaType(baseType); diff --git a/sources/pyside6/tests/QtWidgets/qgraphicsobjectreimpl_test.py b/sources/pyside6/tests/QtWidgets/qgraphicsobjectreimpl_test.py index 91b405aaf..7ae29d1f7 100644 --- a/sources/pyside6/tests/QtWidgets/qgraphicsobjectreimpl_test.py +++ b/sources/pyside6/tests/QtWidgets/qgraphicsobjectreimpl_test.py @@ -53,8 +53,16 @@ class QGraphicsObjectReimpl(UsesQApplication): # See also PYSIDE-1887, PYSIDE-3069 gobjA = GObjA() gobjA.setParentItem(w) + print(gobjA.parentItem()) self.assertIs(type(w), type(gobjA.parentItem())) + # PYSIDE-3115: QVariant conversion of the parent + # (Python class inheriting QGraphicsObject). + parentA = GObjA() + gobjA = GObjA() + gobjA.setParentItem(parentA) + self.assertIs(type(parentA), type(gobjA.parentItem())) + gobjB = GObjB() gobjB.setParentItem(w) self.assertIs(type(w), type(gobjB.parentItem())) |