<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Phil, thanks for the explanation. The issue came up where I need to
do special processing based on the type of the item. I'll rely on my
own "itemtype" property instead.<br>
-Selim<br>
<br>
Phil Thompson wrote:
<blockquote cite="mid:e246ea0cb170d893c9223b12581a69df@localhost"
type="cite">
<pre wrap="">On Thu, 19 May 2011 14:42:47 -0700, Selim Tuvi
<a class="moz-txt-link-rfc2396E" href="mailto:Selim.Tuvi@pdi.dreamworks.com"><Selim.Tuvi@pdi.dreamworks.com></a> wrote:
</pre>
<blockquote type="cite">
<pre wrap="">The code below outputs:
[<__main__.Edge object at 0x2aaab0395830>, <PyQt4.QtGui.QGraphicsItem
object at 0x2aaab03958c0>]
which lists the Node instance as having the class QGraphicsItem when it
should say <__main__.Node object at ...>.
Tested on (Qt 4.7.2, PyQt 4.8.3) and (Qt 4.6.1, PyQt 4.7.2)
Thanks
-Selim
from PyQt4 import QtGui, QtCore
class Node(QtGui.QGraphicsObject):
def __init__(self):
QtGui.QGraphicsObject.__init__(self)
def paint(self, painter, option, widget):
pass
def boundingRect(self):
return QtCore.QRectF()
class Edge(QtGui.QGraphicsItem):
def __init__(self):
QtGui.QGraphicsItem.__init__(self)
def paint(self, painter, option, widget):
pass
def boundingRect(self):
return QtCore.QRectF()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
print QtCore.QT_VERSION_STR, QtCore.PYQT_VERSION_STR
view = QtGui.QGraphicsView()
scene = QtGui.QGraphicsScene()
view.setScene(scene)
scene.addItem(Node())
scene.addItem(Edge())
print scene.items()
view.show()
sys.exit(app.exec_())
</pre>
</blockquote>
<pre wrap=""><!---->
It's because QGraphicsObject inherits both QObject and QGraphicsItem.
items() returns a list of QGraphicsItems which, for a QGraphicsObject, has
a different C++ address than the original QGraphicsObject. PyQt doesn't
recognise that the QGraphicsItem is a cast of the QGraphicsObject. I don't
think there is anything I can (sensibly) do about this.
Phil
</pre>
</blockquote>
</body>
</html>