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

Posted

技术标签:

【中文标题】如何在 QGraphicsPolygonItem 中添加 QInputDialog.getText 文本?【英文标题】:How to add QInputDialog.getText text inside a QGraphicsPolygonItem? 【发布时间】:2012-09-19 16:05:18 【问题描述】:

我在 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】:

好吧,你做得不对。你正在画一个QPicture (pic) 然后把它扔掉。

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

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)

【讨论】:

谢谢,Avaris。在阅读了更多示例后,我最终发现了这一点。感谢您很好地总结了解决方案。

以上是关于如何在 QGraphicsPolygonItem 中添加 QInputDialog.getText 文本?的主要内容,如果未能解决你的问题,请参考以下文章

七夕专属博文-使用QGraphics画“红心“或“黑心“(含数学模型讲解)

七夕专属博文-使用QGraphics画“红心“或“黑心“(含数学模型讲解)

七夕专属博文-使用QGraphics画“红心“或“黑心“(含数学模型讲解)

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)