When QGraphicsScene item is behind it's child Item, I wish for mouse grabber to check item behind, and then grab topmost item if the first is not grabbed.
SAMPLE CODE :
from PySide.QtCore import *
from PySide.QtGui import *
class View(QGraphicsView):
pass
class Scene(QGraphicsScene):
pass
class ChildCircle(QGraphicsEllipseItem):
def __init__(self, parent):
super(ChildCircle, self).__init__()
self.setRect(QRect(-20,-20,70,70))
self.setParentItem( parent )
def mousePressEvent(self, event):
print "Circle is Pressed", event.pos()
class ParentRectangle(QGraphicsRectItem):
def __init__(self, scene):
super(ParentRectangle, self).__init__()
self.scene = scene
self.setRect(QRect(0,0,20,20))
self.scene.addItem(self)
circle = ChildCircle(self)
def mousePressEvent(self, event):
print "Rectangle PRESS", event.pos()
class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.s = Scene()
self.s.setSceneRect(-200,-100,300,300,)
self.v = View(self.s)
self.v.setDragMode(QGraphicsView.ScrollHandDrag)
self.setCentralWidget(self.v)
ParentRectangle(self.s)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(300, 200)
window.show()
sys.exit(app.exec_())
I am not sure I understand your question. The Qt's documentation clearly says the following about
mousePressEvent
method:All you have to do it's to decide whether to call
QEvent::ignore
method or not. So, for example, if the circle object does always ignore mouse press event, the rectangle object will always be the mouse grabber (if you clicked on rectangle). In this code the mouse grabber is item you have clicked.