2

たくさんの小さな肖像画とその下に名前を表示する python アプリケーションが必要です。そのように: 申請書はこんな感じ

それらは移動および編集可能である必要があります (テキストをダブルクリックすることにより)。

私は PyQt4 を使用しているので、キャンバスにaQGraphicsViewと aを使用するのが最も簡単であることがわかりました。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です。ありがとう!

4

1 に答える 1

1

おそらく、QGraphicsItemGroup::setHandlesChildEvents(false) を呼び出す必要があります。

QGraphicsItemGroup を使用した SO の質問 Events を参照してください。

于 2013-03-12T10:34:10.413 に答える