Ajouter un commentaire

jijiz

fredericmazue wrote:
Quote:
Lorsque je déplace un bloc, je souhaite qu'il soit au dessus de tous les autres.

Sans doute mais tu es quand même un cachotier :D
Plus haut tu as écrit:
Quote:
Je dessine dans des qwidget

*Je* dis tu. Moi je ne pense pas. Parce que si tu dessinais, le widget serait dessiné en vertu du principe fondamental de La Palice :D

Donc tu nous caches sans doute que tu appelles une routine de rafraîchissement de la fenêtre. Je veux dire que tu demandes à QT de dessiner au lieu de le faire toi même. Et sans doute aussi que QT maintient une liste des widgets ordonnés dans l'ordre de leur création et les redessine systématiquement dans cet ordre. Et c'est AMHA ton approche du *je* dessine qui est a repenser.
J'ai t'y raison ?
Mais bon va savoir, parce que petit cachotier que tu es, ton code aussi tu le caches soigneusement. Pas un petit bout, pas une ligne, rien, nada, (void *)null.
Ca ne fait pas beaucoup pour déterminer ce qui ne va pas :twisted: :D

Ca fait plaisir d'avoir des méssages comme le tiens, tu n'es pas modérateur pour rien je pense !! Et ça donne envie de s'abonner ^^...

Tous mes objets graphiques dessinés dérivent de cette classe :

class ObjectUI(QtGui.QWidget):
    """ Graphical Objects wich are displayed on the screen (virtual object) """
    def __init__(self, _QSSize, _QPPosition, parent=None):
        super (ObjectUI, self).__init__ (parent)
        self.QPPosition = _QPPosition
        self.QSSize = _QSSize
        
        # Properties of the font
        newFont = self.font()
        newFont.setPixelSize(12)
        self.setFont(newFont)
        self.setFixedSize(self.getSize())     
        fontMetrics = QtGui.QFontMetrics(newFont)
        
        self.QPaint = QtGui.QPainter()
      
#=================================
# Public accessors
#=================================
    def setPosition(self,P):
        """ set the position of the action object block """
        self.QPPosition = P
    
    def getPosition(self):
        """ return the position of the action object block """
        return self.QPPosition   

    def setSize(self,_QSSize):
        """ set the size of the current object user interface """
        self.QSSize = _QSSize
    
    def getSize(self):
        """ return the size of the current object user interface """
        return self.QSSize
    
    def getPainter(self):
        """ return the qpainter """
        return(self.QPaint)
    
#=================================
# Manage the mouse
#=================================
    def mousePressEvent(self, event): 
        """ action performed when the mouse is clicked """
        raise NotImplementedError("Method mousePressEvent not defined in class " + self.__class__.__name__)   

    def mouseMoveEvent(self, event): 
        """ action performed when the mouse is moved """
        raise NotImplementedError("Method mouseMoveEvent not defined in class " + self.__class__.__name__)   
    
    def mouseReleaseEvent(self, event): 
        """ action performed when the mouse is released """
        raise NotImplementedError("Method mouseReleaseEvent not defined in class " + self.__class__.__name__)   

Et voici le code d'un widget graphique qui dessine un carré:

#==================================
# Import modules
#==================================
from PyQt4 import QtGui, QtCore
from ObjectUI import ObjectUI
#==================================
# Constructor
#==================================
class PlaceObjectUI(ObjectUI, QtGui.QLabel):
    colorFix = QtCore.Qt.darkGray
    colorMoving = QtCore.Qt.gray
    colorFill = QtCore.Qt.gray
    """ Graphical Objects of places (represent variables """
    def __init__(self, _QPPosition, parent=None):
        ObjectUI.__init__(self, QtCore.QSize(10, 10), _QPPosition, parent)
        # Attributes
        self.m_place = 0
        self.m_ascendant = 0
        self.m_ascPosition = 0
        self.m_descendants = []
        
        # Color of the picture drawn
        self.color = self.colorFix
               
        # get the painter
        self.painter = self.getPainter()
        
        # Draw the shape
        self.setupShape()

        
#=================================
# Public painting
#=================================         
    def paintEvent(self, event):
        # Go to the position where to draw the object
        self.move(self.getPosition().x(), self.getPosition().y())
        
        self.painter = QtGui.QPainter()
        self.painter.begin(self)
        #painter.setRenderHint(QtGui.QPainter.Antialiasing)
        self.painter.fillRect(event.rect(), QtGui.QBrush(self.colorFix))
        self.drawShape(self.painter)
        self.painter.end()

    def drawShape(self, painter):
        self.painter.fillPath(self.shape, QtGui.QBrush(self.colorFix))

    def setupShape(self):
        QPpath = QtGui.QPainterPath()
        QPpath.setFillRule(QtCore.Qt.OddEvenFill)
        
        QPpath.addRect(0, 0, self.getSize().width(), self.getSize().height())    
        self.shape = QPpath
        
#=================================
# Public accessors
#=================================  
    def setPlace(self, _place):
        self.m_place = _place
    
    def getPlace(self):
        return self.m_place
    
    def setAscendant(self, _asc):
        self.m_ascendant = _asc
        
    def addDescendant(self, _desc):
        self.m_descendants.append(_desc)
    
    def getAscendant(self):
        return self.m_ascendant

#=================================
# Public functions
#=================================  
    def getNbDescendants(self):
        return len(self.m_descendants)
    
    def getDescendant(self, _position):
        return self.m_descendants[_position]
    
    def removeAscendant(self):
        self.m_ascendant = 0

#=================================
# Manage the mouse
#=================================
    def mouseMoveEvent(self, event):
        """ Redraw the current block when the mouse is being moved """
        # shape of the cursor
        self.setCursor(QtCore.Qt.SizeAllCursor)
        # Catch the position of the mouse
        position = event.pos()
        # newPosition is the new position of the QLabel
        newPosition = QtCore.QPointF(self.getPosition().x()+position.x(),self.getPosition().y()+position.y())
        # Move to the current position of the mouse
        self.move(newPosition.x(),newPosition.y())
        # update the position of the QLabel
        self.QPPosition = newPosition
        self.color = self.colorMoving
        self.update()
        
    def mousePressEvent(self, event):
        return 
    
    def mouseReleaseEvent(self, event):
        # shape of the cursor
        self.setCursor(QtCore.Qt.SizeAllCursor)
        self.color = self.colorFix
        self.update()             

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  GGG   RRRR   PPPP   BBBB   BBBB  
G R R P P B B B B
G GG RRRR PPPP BBBB BBBB
G G R R P B B B B
GGG R RR P BBBB BBBB