【发布时间】:2012-08-27 17:01:18
【问题描述】:
我正在创建一个QGraphicsView-derived 小部件,除其他外,它需要在其中的项目之间创建连接——有点像控制流图。但我无法实现一种“绘制”连接的方法
我尝试了两种方法:
- 当源对象的
mouseMoveEvent(..)被触发时创建一个QGraphicsLineItem派生对象,并在每次后续移动时更新它。该线已成功绘制和更新,但最终这不起作用,因为似乎移动鼠标“锁定”事件循环只处理鼠标移动事件,所以另一个对象的 hoverEnterEvent(..)/hoverMoveEvent(..)/等等。不调用方法(这些方法是完成连接所必需的)。 - 在 mouseMoveEvent(..) 中创建一个
QDrag实例来创建两个对象之间的连接允许两个对象一旦断开就形成一个连接,但最终这不起作用,因为QDrag::exec()调用没有提供任何方法在鼠标移动时通知其他对象 - 因此无法更新绘制的连接。
我真的需要两者的混合:在完美的世界中,QDrag::exec() 调用将允许其他某种鼠标移动通知,因此我可以更新表示连接的对象。有人有建议吗?
类似于这个question。
【问题讨论】:
-
它可能不会完全按照你的意愿做,但是 Qt 中有一个图表场景示例:qt-project.org/doc/qt-4.8/graphicsview-diagramscene.html
标签: qt drag-and-drop qgraphicsitem