在QGraphicsItemGroup中编辑QGraphicsTextItem

时间:2012-05-24 16:29:21

标签: python qt pyqt4 qgraphicsview qgraphicstextitem

我想要一个python应用程序,它显示一堆小肖像和下面的名字。像那样: This is how the application looks like

它们应该是可移动的和可编辑的(通过双击文本)。

我正在使用PyQt4,所以我发现,对画布使用QGraphicsViewQGraphicsScene是最简单的。所以我将这样的QGraphicsItemGroup子类化了:

from PyQt4 import QtCore, QtGui
class Speaker(QtGui.QGraphicsItemGroup):
    def __init__(self, name, parent=None):
        QtGui.QGraphicsItemGroup.__init__(self, parent)

        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
        self.text = QtGui.QGraphicsTextItem(name)
        self.text.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
        self.addToGroup(self.text)
        self.portrait = QtGui.QGraphicsPixmapItem(QtGui.QPixmap("portrait.png"))
        self.portrait.setY(-35)
        self.addToGroup(self.portrait)

    def keyPressEvent(self, QKeyEvent):
        # Forwarding KeyPress events to the text to enable text editing
        self.text.keyPressEvent(QKeyEvent)

但是有一些问题:

  • 单击即可触发文本编辑,但我想双击(可能是this的副本)。
  • 您无法使用鼠标选择文本或移动光标,因为移动了整个组。
  • 如果停止编辑,光标将不会消失。 (虽然我知道如何做到这一点,如果我找到一种激活和停用编辑模式的方法)

我试图捕捉双击信号并切换到编辑模式,将所有鼠标事件转发到文本。但是我无法通过双击激活编辑过程,而且我无法保留行为以通过单击其他位置来结束编辑。

所以我希望有人可以帮助我。知道如何手动激活和停用QGraphicsTextItem的文本交互模式可能就足够了。谢谢!

1 个答案:

答案 0 :(得分:1)

可能你应该调用QGraphicsItemGroup :: setHandlesChildEvents(false)。

参见SO问题Events with QGraphicsItemGroup