示例#1
0
    def __init__(self, parentItem, **kargs):
        global parent
        parent = self

        if not QMLItem.__engine__:
            QMLItem.__engine__ = QDeclarativeEngine()
        component = QDeclarativeComponent(QMLItem.__engine__)
        qmlData = 'import Qt 4.7\n%s { }' % self.__className__
        component.setData(qmlData, QUrl())

        self._proxy = component.create()
        self._metaObject = self._proxy.metaObject()

        self._scene = parentItem.scene()
        self._scene.addItem(self._proxy)

        t = type(self)
        tDict = t.__dict__
        for key in tDict:
                # connect signals
                if key.startswith('on') and (key in  self.__signals__):
                    signalName = self.__signals__[key]
                    signal = getattr(self._proxy, signalName)
                    signal.connect(getattr(self, key))

                # initialize properties
                elif self._metaObject.indexOfProperty(key) != -1:
                    setattr(self, key, QMLProperty(self._proxy, key, tDict[key]))

                else:
                    try:
                        # istanciate types
                        if issubclass(tDict[key], QMLItem):
                            setattr(self, key, tDict[key](self._proxy))
                    except TypeError:
                        pass

        parent = None