diff options
4 files changed, 85 insertions, 2 deletions
diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml index e5e72dc65..2899be47a 100644 --- a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml @@ -3641,7 +3641,7 @@ <enum-type name="PixmapPadMode"/> </object-type> - <object-type name="QGraphicsObject" since="4.6" /> + <object-type name="QGraphicsObject" since="4.6" default-superclass="QGraphicsItem"/> <object-type name="QGraphicsOpacityEffect" since="4.6"/> <object-type name="QGraphicsRotation" since="4.6"/> <object-type name="QGraphicsScale" since="4.6"/> diff --git a/sources/pyside2/tests/QtWidgets/CMakeLists.txt b/sources/pyside2/tests/QtWidgets/CMakeLists.txt index 0384e0a8d..9caf7e365 100644 --- a/sources/pyside2/tests/QtWidgets/CMakeLists.txt +++ b/sources/pyside2/tests/QtWidgets/CMakeLists.txt @@ -93,6 +93,7 @@ PYSIDE_TEST(qdynamic_signal.py) PYSIDE_TEST(qformlayout_test.py) PYSIDE_TEST(qgraphicsitem_test.py) PYSIDE_TEST(qgraphicsitem_isblocked_test.py) +PYSIDE_TEST(qgraphicsobjectreimpl_test.py) PYSIDE_TEST(qgraphicsproxywidget_test.py) PYSIDE_TEST(qgraphicsscene_test.py) PYSIDE_TEST(qimage_test.py) diff --git a/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py b/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py new file mode 100644 index 000000000..fd79ce3aa --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of PySide2. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test cases related to QGraphicsItem and subclasses''' + +import unittest + +from PySide2.QtWidgets import QGraphicsObject, QGraphicsWidget +from PySide2.QtCore import QRectF + +from helper import UsesQApplication + +class GObjA(QGraphicsObject): + def paint(self, *args): + pass + + def boundingRect(self): + return QRectF() + + def itemChange(self, *args): + return QGraphicsObject.itemChange(self, *args) + +class GObjB(QGraphicsObject): + def paint(self, *args): + pass + + def boundingRect(self): + return QRectF() + +class QGraphicsObjectReimpl(UsesQApplication): + '''Test case for reimplementing QGraphicsObject''' + + def testReimplementationTypes(self): + w = QGraphicsWidget() + + # PYSIDE-86: + # This case failed because GObjA was reimplementing + # the method itemChange() from QGraphicsItem, + # and then the QVariant was not associated with + # a QGraphicsItem but a QObjectItem because the base + # class was a QObject. + gobjA = GObjA() + gobjA.setParentItem(w) + self.assertIs(type(w), type(gobjA.parentItem())) + + gobjB = GObjB() + gobjB.setParentItem(w) + self.assertIs(type(w), type(gobjB.parentItem())) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp index bb8f95617..c3bb4cbc8 100644 --- a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp @@ -2240,7 +2240,13 @@ AbstractMetaClassList ShibokenGenerator::getBaseClasses(const AbstractMetaClass* { AbstractMetaClassList baseClasses; if (metaClass) { - const QStringList &baseClassNames = metaClass->baseClassNames(); + QStringList baseClassNames(metaClass->baseClassNames()); + const QString defaultSuperclass = metaClass->typeEntry()->defaultSuperclass(); + if (!defaultSuperclass.isEmpty()) { + int index = baseClassNames.indexOf(defaultSuperclass); + if (index >= 0) + baseClassNames.move(index, 0); + } for (const QString &parent : baseClassNames) { AbstractMetaClass *clazz = AbstractMetaClass::findClass(classes(), parent); if (clazz) |