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捨てています。

にペイントたいと思いますQGraphicsPolygonItempaintの方法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)
于 2012-09-23T04:17:07.903 に答える