如何在QGraphicsPolygonItem中添加QInputDialog.getText文本?

时间:2012-09-19 16:05:19

标签: qt pyqt4

我在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()

1 个答案:

答案 0 :(得分:2)

嗯,你没有正确地做到这一点。您正在绘制QPicturepic)并将其丢弃。

我假设您要在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}}