我想用矩形对象编写一个简单的块方案,用一些文本填充。对于块我使用QGraphicsItem(父),矩形中的文本是QLabel的代理,QLabel被设置为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)
我在QGraphicsSimpleTextItem上选择了QLabel,因为我应该能够为标签设置文本的对齐方式。但它不起作用。对齐仍然是Left | Up
答案 0 :(得分:0)
事实证明,一个简单的几何结构可以解决这个问题:
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)