1

我正在创建一个QGraphicsView衍生的小部件,除其他外,它需要在其中的项目之间创建连接——有点像控制流图。但我无法实现一种“绘制”连接的方法

我尝试了两种方法:

  1. QGraphicsLineItem在触发源对象时创建一个派生对象mouseMoveEvent(..),并在每次后续移动时更新它。该线已成功绘制和更新,但最终这不起作用,因为似乎移动鼠标“锁定”事件循环只处理鼠标移动事件,所以另一个对象的 hoverEnterEvent(..)/hoverMoveEvent(..)/等等 不调用方法(这些方法是完成连接所必需的)。
  2. 在 mouseMoveEvent(..) 中创建一个QDrag实例以创建两个对象之间的连接允许两个对象在删除后形成连接,但最终这不起作用,因为该QDrag::exec()调用无法通知其他对象鼠标移动- 所以绘制的连接无法更新。

我真的需要两者的混合:在一个完美的世界中,QDrag::exec()调用将允许其他某种鼠标移动通知,所以我可以更新表示连接的对象。有人有建议吗?

类似于这个问题

4

1 回答 1

1

我有一个开源小部件可以执行此操作,它适用于 PyQt,但它可能对您正在寻找的内容有所帮助。

您可以在http://dev.projexsoftware.com/projects/projexui的 projexui 框架中找到它

您正在寻找的代码特别是在 projexui/widgets/xnodewidget 中找到的 XNodeWidget 类

最终,我使用鼠标按下事件通过场景启动连接并忽略该事件(基于某种触发器 - 控制按下或热点区域等)

希望有帮助!

(Orbiter 应用程序上的表格视图就是一个例子 - http://www.projexsoftware.com/software/orbiter

于 2012-09-03T02:05:44.477 回答