题
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 +)后的代码只会继续代码
不隶属于 StackOverflow