【问题标题】:Update a QGraphicsItem whilst a drag is occuring发生拖动时更新 QGraphicsItem
【发布时间】:2012-08-27 17:01:18
【问题描述】:

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

我尝试了两种方法:

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

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

类似于这个question

【问题讨论】:

标签: qt drag-and-drop qgraphicsitem


【解决方案1】:

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

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

您要查找的代码具体是在 projexui/widgets/xnodewidget 中找到的 XNodeWidget 类

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

希望有帮助!

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

【讨论】:

  • 谢谢,这就是我要找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多