2017-07-24 4 views
0

Je voudrais programmer un schéma de blocs simple avec des objets rectangle, rempli de texte. Pour les blocs, j'utilise un QGraphicsItem (parent) et le texte dans le rectangle est un proxy d'un QLabel qui est configuré comme un enfant de QGraphicsItem.Pyside Qt aligner Qlabel proxy widget dans QGraphicsItem

class Node(QtGui.QGraphicsItem): 
Type = QtGui.QGraphicsItem.UserType + 1 

def __init__(self, scene, parent=None): 
    QtGui.QGraphicsItem.__init__(self, scene=scene, parent=parent) 

    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
    self.setFlag(QtGui.QGraphicsItem.ItemSendsGeometryChanges) 
    self.setCacheMode(self.DeviceCoordinateCache) 
    self.setZValue(-1) 

    self.width = 100 
    self.height = 50 

    textLabel = QtGui.QLabel('B1') 
    textLabel.setAlignment(QtCore.Qt.AlignCenter) # This doesn't do shit 
    proxyText = self.scene().addWidget(textLabel) 
    proxyText.setParentItem(self) 

J'ai choisi QLabel sur QGraphicsSimpleTextItem parce que je devrais être en mesure de définir l'alignement du texte pour une étiquette. Mais ça ne marche pas. L'alignement est toujours à gauche | Up

Répondre

0

fin de compte, une géométrie simple fait le tour:

class Node(QtGui.QGraphicsItem): 
    Type = QtGui.QGraphicsItem.UserType + 1 

def __init__(self, scene, parent=None): 
    QtGui.QGraphicsItem.__init__(self, scene=scene, parent=parent) 

    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
    self.setFlag(QtGui.QGraphicsItem.ItemSendsGeometryChanges) 
    self.setCacheMode(self.DeviceCoordinateCache) 
    self.setZValue(-1) 

    self.width = 100 
    self.height = 50 

    textLabel = QtGui.QLabel('B1') 
    textLabel.setAlignment(QtCore.Qt.AlignCenter) # This doesn't do shit on its own 

    textLabel.setGeometry(
     -self.width/2, 
     -self.height/2, 
     self.width, 
     self.height) # It needs a frame of reference 

    proxyText = self.scene().addWidget(textLabel) 
    proxyText.setParentItem(self)