4

いくつかの QGraphicItems を異なる QGraphicsItemGroups 間で移動できる PyQt QGraphicsView プロジェクトを構築しています。そのために、「新しい」親 itemGroup の addItemToGroup() メソッドを使用します。

これは正常に機能しますが、カスタムの子項目クラスで itemChange() メソッドを定義しない限りのみです。そのメソッドを定義すると (関数呼び出しをスーパー クラスに渡すだけでも)、何を試しても childItems は ItemGroups に追加されません。

class MyChildItem(QtGui.QGraphicsItemGroup):
    def itemChange(self, change, value):
        # TODO: Do something for certain cases of ItemPositionChange
        return QtGui.QGraphicsItemGroup.itemChange(self, change, value)
        #return super().itemChange(change, value)   # Tried this variation too
        #return value   # Tried this too, should work according to QT doc

Python でスーパークラス メソッドを適切に呼び出すには、単に愚かすぎるのでしょうか、それとも QT/PyQT マジックのどこかに問題があるのでしょうか?

私は PyQt 4.8 と QT 5 で Python 3.3 を使用しています。

4

1 に答える 1

2

私はまったく同じ問題を抱えていました。多分これ: http://www.mail-archive.com/pyqt@riverbankcomputing.com/msg27457.htmlあなたの質問のいくつかに答えますか? PyQt4 では運が悪いようです。

更新: 実際には、回避策が見つかりました:

import sip

def itemChange(self, change, value):
        # do stuff here...
        result = super(TestItem, self).itemChange(change, value)
        if isinstance(result, QtGui.QGraphicsItem):
            result = sip.cast(result, QtGui.QGraphicsItem)
        return result

ここから取得: http://www.mail-archive.com/pyqt@riverbankcomputing.com/msg26190.html

おそらく最もエレガントで一般的な解決策ではないかもしれませんが、ここではうまくいきます - QGraphicItems を QGraphicItemGroups に再度追加することができます。

于 2013-12-14T15:46:53.313 に答える