我有一些元素排列成QGraphicsScene
(继承QGraphicsItem
的节点和边)。节点可以使用边连接到许多其他节点(听起来很明显,但最好指出这一点)。在我的代码中,每当我在两个节点之间添加一条新边时,我都要确保该边的zValue
低于所连接节点的zValue
(一条边的锚定点默认为节点的中心)。现在,我遇到了移动节点中每条边的定位点的需要:为此,我需要绘制一个控制柄,该控制柄可用于交互移动定位点:如下所示:
问题来了。因为边zValue
比节点的低,所以边的某些部分会被节点的形状所遮蔽(这是应该的)。现在我需要在节点顶部绘制句柄。我已经尝试从node shape paint
方法中绘制句柄,但是我无法与它交互(这只是一些无用的绘图):我需要的是绘制一个可见的句柄,并且可以与它交互(例如使用mouseMoveEvent
)。在
我怎样才能达到这种行为?在
我尝试用另一种方式来实现这一点:在节点的顶部绘制边,并动态地调整与源节点和目标节点的交点(而不是绘制边的重叠部分),但这会在移动节点时引入许多瑕疵(可能是因为计算交集的时间太长)一切都变慢了)。我不发布这个实现的代码(还没有),因为我想用其他方式解决这个问题,但是如果这是实现我所需要的唯一方法,那么我可以这样做。在
我使用的是PyQt5和python3.4。在
你可以用更高的Z使句柄独立于QGraphicsItems,但“链接”到它们所附加到的边上。不能通过使它们成为边的子对象来链接它们(因为它们的Z值将不再应用-它们将被边覆盖)。我不确定是否可以将它们分组到一个QGraphicsItemGroup中,但我怀疑这也行不通。但是,您可以自己使用句柄和边缘中的指针来管理分组。在
当用户移动手柄时,你可以自己移动边缘。在
相关问题 更多 >
编程相关推荐