我在PyQt4中构建,无法弄清楚如何将文本添加到QGraphicsPolygonItem。这个想法是在用户双击后将文本设置在矩形框的中间(并通过QInputDialog.getText获取一个对话框)。
课程是:
class DiagramItem(QtGui.QGraphicsPolygonItem):
def __init__(self, diagramType, contextMenu, parent=None, scene=None):
super(DiagramItem, self).__init__(parent, scene)
path = QtGui.QPainterPath()
rect = self.outlineRect()
path.addRoundRect(rect, self.roundness(rect.width()), self.roundness(rect.height()))
self.myPolygon = path.toFillPolygon()
我的双击鼠标事件看起来像这样,但什么都不更新!
def mouseDoubleClickEvent(self, event):
text, ok = QtGui.QInputDialog.getText(QtGui.QInputDialog(),'Create Region Title','Enter Region Name: ', \
QtGui.QLineEdit.Normal, 'region name')
if ok:
self.myText = str(text)
pic = QtGui.QPicture()
qp = QtGui.QPainter(pic)
qp.setFont(QtGui.QFont('Arial', 40))
qp.drawText(10,10,200,200, QtCore.Qt.AlignCenter, self.myText)
qp.end()
答案 0 :(得分:2)
嗯,你没有正确地做到这一点。您正在绘制QPicture
(pic
)并将其丢弃。
我假设您要在QGraphicsPolygonItem
上绘制 。 QGraphicsItem
class DiagramItem(QtGui.QGraphicsPolygonItem):
def __init__(self, diagramType, contextMenu, parent=None, scene=None):
super(DiagramItem, self).__init__(parent, scene)
# your `init` stuff
# ...
# just initialize an empty string for self.myText
self.myText = ''
def mouseDoubleClickEvent(self, event):
text, ok = QtGui.QInputDialog.getText(QtGui.QInputDialog(),
'Create Region Title',
'Enter Region Name: ',
QtGui.QLineEdit.Normal,
'region name')
if ok:
# you can leave it as QString
# besides in Python 2, you'll have problems with unicode text if you use str()
self.myText = text
# force an update
self.update()
def paint(self, painter, option, widget):
# paint the PolygonItem's own stuff
super(DiagramItem, self).paint(painter, option, widget)
# now paint your text
painter.setFont(QtGui.QFont('Arial', 40))
painter.drawText(10,10,200,200, QtCore.Qt.AlignCenter, self.myText)
及其衍生物的paint
方法负责绘制项目。如果你想用这个项目绘制额外的东西,你应该覆盖那个方法并在那里进行绘画:
{{1}}