如何使QGraphicsItemGroup内的图形项可单独移动?
如何让QGraphicsItemGroup内的子项单独可移动?
我懂你的困扰——你希望组里的两个圆盘既能留在同一个QGraphicsItemGroup里(方便互相获取位置),又能各自独立拖动,而不是一拖动就整个组一起动。
问题根源在于QGraphicsItemGroup的默认行为:它会接管所有子项的事件处理(包括鼠标点击、拖动这类交互事件)。这就导致你给子项设置的ItemIsMovable标志完全失效——所有交互都会被组本身拦截,子项根本得不到响应。
解决方案:禁用组的子事件处理
只需要在MyGroup类的初始化方法里加一行代码,让组不再拦截子项的事件,这样每个子项就能独立响应自己的ItemIsMovable设置了:
修改后的MyGroup类代码:
class MyGroup(QGraphicsItemGroup): def __init__(self): super().__init__() self.disk1 = MyDisk(50, 50, 20, Qt.red) self.disk2 = MyDisk(150, 150, 20, Qt.red) self.addToGroup(self.disk1) self.addToGroup(self.disk2) # 关键代码:禁用组对子项事件的处理,让子项自己响应交互 self.setHandlesChildEvents(False)
额外拓展:同时支持组整体移动和子项单独移动
如果之后你需要兼顾两种操作——既可以拖动整个组,又能单独拖动子项,只需要给组也加上可移动标志:
self.setFlag(QGraphicsItemGroup.ItemIsMovable)
这样点击组的空白区域就能拖动整个组,点击某个圆盘则可以单独拖动它,完全满足你的需求。
现在运行代码,两个红色圆盘就能像绿色圆盘一样单独拖动了,同时它们仍然属于同一个组,你可以随时通过组来获取彼此的位置信息~
内容的提问来源于stack exchange,提问作者Llewlyn
相关产品推荐
相关产品推荐

