我正在创建一个QGraphicsView
派生的窗口小部件,除其他外,它需要在其中的项目之间创建连接 - 有点像控制流图。但是我在实现一种“绘制”连接的方法时遇到了麻烦
我尝试了两种方法:
QGraphicsLineItem
时创建mouseMoveEvent(..)
派生对象,并在每次后续移动时更新它。该行被成功绘制和更新,但最终这不起作用,因为似乎将鼠标“锁定”事件循环仅处理鼠标移动事件,因此另一个对象的hoverEnterEvent(..)/ hoverMoveEvent(..)/等等不调用方法(这些是完成连接所必需的。)QDrag
实例以创建两个对象之间的连接允许两个对象在删除后形成连接,但最终这不起作用,因为QDrag::exec()
调用没有提供其他对象通知鼠标移动的方法 - 因此无法更新绘制的连接。我真的需要两者的混合:在一个完美的世界中,QDrag::exec()
调用将允许其他某种类型的鼠标移动通知,因此我可以更新代表连接的对象。有人有建议吗?
与此question类似。
答案 0 :(得分:1)
我有一个开源小部件来执行此操作,它适用于PyQt,但它可能对您正在寻找的内容有所帮助。
您可以在http://dev.projexsoftware.com/projects/projexui
的projexui框架中找到它您正在寻找的代码特别是在projexui / widgets / xnodewidget中找到的XNodeWidget类
最终,我使用鼠标按下事件通过场景开始连接并忽略该事件(基于某种触发器 - 控制按键或热点区域等)。
希望有所帮助!
(它的外观示例是Orbiter应用程序上的表格视图 - http://www.projexsoftware.com/software/orbiter)