用更高的zValu在QGraphicsItem上绘图

2024-06-25 06:32:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些元素排列成QGraphicsScene(继承QGraphicsItem的节点和边)。节点可以使用边连接到许多其他节点(听起来很明显,但最好指出这一点)。在我的代码中,每当我在两个节点之间添加一条新边时,我都要确保该边的zValue低于所连接节点的zValue(一条边的锚定点默认为节点的中心)。现在,我遇到了移动节点中每条边的定位点的需要:为此,我需要绘制一个控制柄,该控制柄可用于交互移动定位点:如下所示:

enter image description here

问题来了。因为边zValue比节点的低,所以边的某些部分会被节点的形状所遮蔽(这是应该的)。现在我需要在节点顶部绘制句柄。我已经尝试从node shape paint方法中绘制句柄,但是我无法与它交互(这只是一些无用的绘图):我需要的是绘制一个可见的句柄,并且可以与它交互(例如使用mouseMoveEvent)。在

我怎样才能达到这种行为?在

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

我使用的是PyQt5和python3.4。在


Tags: 方法代码元素节点方式绘制中心句柄
1条回答
网友
1楼 · 发布于 2024-06-25 06:32:30

你可以用更高的Z使句柄独立于QGraphicsItems,但“链接”到它们所附加到的边上。不能通过使它们成为边的子对象来链接它们(因为它们的Z值将不再应用-它们将被边覆盖)。我不确定是否可以将它们分组到一个QGraphicsItemGroup中,但我怀疑这也行不通。但是,您可以自己使用句柄和边缘中的指针来管理分组。在

当用户移动手柄时,你可以自己移动边缘。在

相关问题 更多 >