在具有更高zValue的

时间:2015-09-13 19:05:38

标签: python graph qt5 qgraphicsitem pyqt5

我将一些元素排列成QGraphicsScene(继承QGraphicsItem的节点和边)。节点可以使用边缘连接到许多其他节点(听起来很明显,但更好地指出它)。在我的代码中,每当我在2个节点之间添加新边时,我确保边缘的zValue低于连接节点的zValue(边缘的锚点是默认的节点的中心)。现在我遇到了移动节点内每条边的锚点的需要:要做到这一点,我需要绘制一个可用于交互式移动锚点的句柄:如下所示:

enter image description here

这就是问题所在。由于边zValue低于节点的边缘,因此边缘的某些部分被节点的形状遮蔽(如应该的那样)。现在我需要在节点顶部绘制句柄。我已经尝试从节点形状paint方法中绘制句柄,但后来我无法与它交互(它只是一些无用的绘图):我需要的是绘制一个可见的手柄,用我可以互动(例如使用mouseMoveEvent)。

我该如何实现这种行为?

我尝试以另一种方式实现这一点:在节点顶部绘制边缘并动态调整与源节点和目标节点的交点(不绘制边缘的重叠部分)但这会引入大量工件移动节点(可能是因为它需要太多时间来计算交叉点,所以一切都变慢了)。我还没有发布这个实现的代码(因为我想以其他方式解决这个问题),但如果这是实现我需要的唯一方法,那么我没有问题。

我使用的是PyQt5和Python 3.4。

1 个答案:

答案 0 :(得分:0)

你可以使把手独立的QGraphicsItems具有更高的Z但是"链接"到他们所附着的边缘。你不能通过使它们成为边缘的孩子来链接它们(因为那时它们的Z值将不再适用 - 它们将被边缘覆盖)。我不确定你是否可以将它们分组到QGraphicsItemGroup中,但我怀疑它也不会起作用。但是你可以用手柄和边缘的指针自己管理分组。

然后,当用户移动手柄时,您可以自己移动边缘。