Редактировать QGraphicsTextItem внутри QGraphicsItemGroup
Я хочу приложение на python, которое отображает кучу маленьких портретов и имена под ним. Как это:
Они должны быть подвижными и редактируемыми (двойным щелчком по тексту).
Я использую PyQt4, поэтому я понял, что было бы проще всего использовать QGraphicsView
и QGraphicsScene
для холста. Таким образом, я подкласс 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)
Но есть некоторые проблемы:
- Редактирование текста запускается одним щелчком мыши, но я хочу двойной щелчок (возможно, дубликат этого).
- Вы не можете использовать мышь, чтобы выделить текст или переместить курсор, потому что тогда перемещается вся группа.
- Если вы остановите редактирование, курсор не исчезнет. (Хотя я знаю, как это сделать, если я найду способ активировать и деактивировать режим редактирования)
Я попытался поймать сигнал двойного щелчка и переключиться в режим редактирования, который перенаправляет все события мыши в текст. Но я не смог активировать процесс редактирования двойным щелчком, и, кроме того, я не смог сохранить поведение, чтобы завершить редактирование, щелкнув где-то еще.
Поэтому я надеюсь, что кто-то может мне помочь. Может быть достаточно знать, как вручную активировать и деактивировать режим взаимодействия текста QGraphicsTextItem
, Спасибо!
1 ответ
Вероятно, вам следует вызвать QGraphicsItemGroup::setHandlesChildEvents(false).
Смотрите вопрос SO События с QGraphicsItemGroup