3

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

1 回答 1

2

好吧,你没有正确地做到这一点。你正在画一个QPicture( pic) 并把它扔掉。

我假设你想. 方法(及其派生词)负责绘制项目。如果您想用该项目绘制额外的东西,您应该覆盖该方法并在那里进行绘制:QGraphicsPolygonItempaintQGraphicsItem

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)
于 2012-09-23T04:17:07.903 回答