我将一些元素排列成QGraphicsScene
(继承QGraphicsItem
的节点和边)。节点可以使用边缘连接到许多其他节点(听起来很明显,但更好地指出它)。在我的代码中,每当我在2个节点之间添加新边时,我确保边缘的zValue
低于连接节点的zValue
(边缘的锚点是默认的节点的中心)。现在我遇到了移动节点内每条边的锚点的需要:要做到这一点,我需要绘制一个可用于交互式移动锚点的句柄:如下所示:
这就是问题所在。由于边zValue
低于节点的边缘,因此边缘的某些部分被节点的形状遮蔽(如应该的那样)。现在我需要在节点顶部绘制句柄。我已经尝试从节点形状paint
方法中绘制句柄,但后来我无法与它交互(它只是一些无用的绘图):我需要的是绘制一个可见的手柄,用我可以互动(例如使用mouseMoveEvent
)。
我该如何实现这种行为?
我尝试以另一种方式实现这一点:在节点顶部绘制边缘并动态调整与源节点和目标节点的交点(不绘制边缘的重叠部分)但这会引入大量工件移动节点(可能是因为它需要太多时间来计算交叉点,所以一切都变慢了)。我还没有发布这个实现的代码(因为我想以其他方式解决这个问题),但如果这是实现我需要的唯一方法,那么我没有问题。
我使用的是PyQt5和Python 3.4。
答案 0 :(得分:0)
你可以使把手独立的QGraphicsItems具有更高的Z但是"链接"到他们所附着的边缘。你不能通过使它们成为边缘的孩子来链接它们(因为那时它们的Z值将不再适用 - 它们将被边缘覆盖)。我不确定你是否可以将它们分组到QGraphicsItemGroup中,但我怀疑它也不会起作用。但是你可以用手柄和边缘的指针自己管理分组。
然后,当用户移动手柄时,您可以自己移动边缘。