# Source code for pyqtgraph.graphicsItems.GraphicsObject

    import warnings
    from ..Qt import QT_LIB, QtCore, QtWidgets
    from .GraphicsItem import GraphicsItem

    __all__ = ['GraphicsObject']

    class GraphicsObject(GraphicsItem, QtWidgets.QGraphicsObject):
        """
        **Bases:** :class:`GraphicsItem <pyqtgraph.GraphicsItem>`, :class:`QtWidgets.QGraphicsObject`

        Extension of QGraphicsObject with some useful methods (provided by :class:`GraphicsItem <pyqtgraph.GraphicsItem>`)
        """
        _qtBaseClass = QtWidgets.QGraphicsObject

        def __init__(self, *args):
            self.__inform_view_on_changes = True
            QtWidgets.QGraphicsObject.__init__(self, *args)
            self.setFlag(self.GraphicsItemFlag.ItemSendsGeometryChanges)
            GraphicsItem.__init__(self)

        def itemChange(self, change, value):
            ret = super().itemChange(change, value)
            if change in [self.GraphicsItemChange.ItemParentHasChanged, self.GraphicsItemChange.ItemSceneHasChanged]:
                if self.__class__.__dict__.get('parentChanged') is not None:
                    # user's GraphicsObject subclass has a parentChanged() method
                    warnings.warn(
                        "parentChanged() is deprecated and will be removed in the future. "
                        "Use changeParent() instead.",
                        DeprecationWarning, stacklevel=2
                    )
                    if QT_LIB == 'PySide6' and QtCore.__version_info__ == (6, 2, 2):
                        # workaround PySide6 6.2.2 issue https://bugreports.qt.io/browse/PYSIDE-1730
                        # note that the bug exists also in PySide6 6.2.2.1 / Qt 6.2.2
                        getattr(self.__class__, 'parentChanged')(self)
                    else:
                        self.parentChanged()
                else:
                    self.changeParent()
            try:
                inform_view_on_change = self.__inform_view_on_changes
            except AttributeError:
                # It's possible that the attribute was already collected when the itemChange happened
                # (if it was triggered during the gc of the object).
                pass
            else:
                if inform_view_on_change and change in [self.GraphicsItemChange.ItemPositionHasChanged, self.GraphicsItemChange.ItemTransformHasChanged]:
                    self.informViewBoundsChanged()

            return ret