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()
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 :
Et voici le code d'un widget graphique qui dessine un carré: