Qt的QGraphicsScene提供了一些不错的功能,开箱即:用户可以选择的对象和移动它们。

我想一两件事 - 操作时收到通知用户完成移动对象。 有较低级别的事件,像鼠标移动,按下,释放,但我不喜欢重新实现已经存在的功能性(移动的物体)。

http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange 方法看起来像,但是当用户移动对象时,它不被调用。

我使用Qt 4.6

原来,你必须设置一个标志,启用此事件:   用品 - > setFlag(的QGraphicsItem :: ItemSendsGeometryChanges,TRUE);

但是,现在的事件被触发,每次项目的corrdinates变化。我想有只有当变化是由用户进行的事件。

有帮助吗?

解决方案

我认为最好的办法是实现您的商品mouseRelease事件,当它被触发,你就能知道,如果该项目被移动或没有。如果该项目被移动接受的情况下,否则该事件发送到的基类。

例如:

 void YourItem::mouseReleaseEvent(QMouseEvent *event)
 {
     if (wasMoved()) {
         //do something and accept the event
     } else {
         // to the base class
         QGraphicsItem::mouseReleaseEvent(event);
     }
 }

WasMoved()是你的方法来知道,如果该项目被移动

其他提示

除了它不能总是工作,因为你并不总是得到一个mouseReleaseEvent ...

这是做拖动但是阻塞的代码,所以你可以把它在那里,因为你释放鼠标按钮,它始终工作......(QT 4.7 +)后的代码只会继续代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top