我有一个QGraphicsItem
叫它child_item
是另一个QGraphicsItem
叫的孩子parent_item
。我需要取消父母身份child_item
,parent_item
这样child_item
就没有父母了。
但是当我尝试childItem.setItemParent(None)
我的脚本崩溃时。
显然这是因为当您以这种方式删除 aQGraphicsItem
的父项时,该项目将返回给 Qt ...
现在我刚刚创建了一个global_parent
QGraphicsItem
,因此如果任何项目需要取消父级,我将简单地将其置于父级下global_parent
,如果 aQGraphicsItem
有父级,global_parent
我的代码将表现得就像它没有父级一样,但我想要一个更好的解决方案。
请问有什么想法吗?
我的一些代码:
POINT_SIZE = 7
class Test_Box(QGraphicsItem):
# Constants
WIDTH = 50 * POINT_SIZE
HEIGHT = 13 * POINT_SIZE
RECT = QRectF(0, 0, WIDTH, HEIGHT)
CORNER_RADIUS = 1.5 * POINT_SIZE
def __init__(self, position, parent=None):
super(Test_Box, self).__init__(parent)
# Settings
self.setFlags( self.flags() |
QGraphicsItem.ItemIsSelectable |
QGraphicsItem.ItemIsMovable |
QGraphicsItem.ItemIsFocusable |
QGraphicsItem.ItemSendsScenePositionChanges )
self.setPos(position)
def boundingRect(self):
return Test_Box.RECT
def paint(self, painter, option, widget):
# Draw Box
brush = QBrush()
painter.setBrush(brush)
painter.drawRoundedRect(Test_Box.RECT, Test_Box.CORNER_RADIUS, Test_Box.CORNER_RADIUS)
def itemChange(self, change, variant):
super(Test_Box, self).itemChange(change, variant)
if change == QGraphicsItem.ItemScenePositionHasChanged:
self.setParentItem(None)
return QGraphicsItem.itemChange(self, change, variant)
调用 setItemParent 并将项目的父项设置为另一个项目确实有效,因此我同时使用通用父项。