Hi.

It seems my previous mail didn't make it to the list with the text... weird.

Let me try again.

I am trying to subclass QgsMapCanvasItem so as do display items on top
of the maps.

I would like those items to react to mouse events.

I have implemented the handles for the mouse events as the Qt API
suggests, but my items do not seem to receive any events. The
isUnderMouse method returns coherent results when run from the python
console.

The source file for my geographicitems is included.

Thanks for your help.
import random
import threading
import time
import socket
from qgis import *
from qgis.core import *
from qgis.gui import *
import PyQt4.QtGui as QtGui
import PyQt4.QtCore as QtCore
                
class GeographicItem(QgsMapCanvasItem):
                
        def __init__(self,iface):
                self.iface=iface
                self.canvas = iface.mapCanvas()
                QgsMapCanvasItem.__init__(self,self.canvas)
                self.position=QgsPoint()
                self.identification=0
                self.tn=0
                self.override = False
                self.overrideColor=QtGui.QColor(0,255,255)
                
                self.setHandlesChildEvents(True)
                self.GraphicsItemFlags=QtGui.QGraphicsItem.ItemIsSelectable | 
QtGui.QGraphicsItem.ItemIsFocusable
                
                self.texte = 
QtGui.QGraphicsTextItem(QtCore.QString("Name"),self,self.canvas.scene())
                self.texte.setPos(-10,10)
                
self.rec=QtGui.QGraphicsRectItem(0,0,10,10,self,self.canvas.scene())
                QtCore.QObject.connect(self.canvas,QtCore.SIGNAL( 
"renderComplete( QPainter * )" ),self.renderComplete)
        
        def acceptedMouseEvents(self):
                result=QtCore.Qt.LeftButton | QtCore.Qt.RightButton | 
QtCore.Qt.MidButton
                return result
        
        #def acceptsHoverEvents(self):
        #       return True
        
        def mousePressEvent(self, event):
                self.setTN(123)
        
        def mouseReleaseEvent(self, event):
                self.setTN(123)
                
        #def keyPressEvent(self,event):
        #       self.setTN(123)

        #def hoverEnterEvent(self,event):
        #       self.override= True
        #       self.updateStyles()
                
        #def hoverExitEvent(self,event):
        #       self.override= False
        #       self.updateStyles()

        def boundingRect(self):
                return QtCore.QRectF(0 , 0 , 10 , 10 );
        
        def getTN(self):
                return self.tn
                
        def setTN(self,tn):
                self.tn=tn
                self.canvas.scene().removeItem(self.texte)
                del(self.texte)
                self.texte = 
QtGui.QGraphicsTextItem(QtCore.QString(oct(self.tn)),self,self.canvas.scene())
                self.updateStyles()
        
        def setIdentification(self, identification):
                self.identification=identification
                self.updateStyles()
        
        def setPositionGeo(self,position):
                self.position=position
                self.updateStyles()
                self.setPos(self.toCanvasCoordinates(self.position))
                self.update()
        
        def updateStyles(self):
                pen=self.rec.pen()
                if not self.override:
                        if self.identification < 5:
                                color=QtGui.QColor(255,0,0)
                        else:
                                color=QtGui.QColor(0,0,255)
                else:
                        color=self.overrideColor
                pen.setColor(color)
                self.texte.setDefaultTextColor(color)
                self.rec.setPen(pen)
                self.texte.update()
                self.update()
        
        def paint(self,painter,option,widget):
                return
                
        def renderComplete(self,painter):
                self.updateStyles()
                self.setPos(self.toCanvasCoordinates(self.position))
                self.update()
                
        def removeFromCanvas(self):
                self.canvas.scene().removeItem(self)

        def addToCanvas(self):
                self.canvas.scene().addItem(self)
_______________________________________________
Qgis-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to