4

我正在构建一个 PyQt QGraphicsView 项目,其中一些 QGraphicItems 可以在不同的 QGraphicsItemGroups 之间移动。为此,我使用“新”父 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 魔法中的某个地方出现了问题?

我将 Python 3.3 与 PyQt 4.8 和 QT 5 一起使用。

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 回答