Qt的QGraphicsScene提供了一些不错的功能:用户可以选择对象并移动它们。
我还想要一件事 - 当用户完成移动对象时收到通知。 有较低级别的事件,如鼠标移动,按下,释放,但我不想重新实现已经存在的功能(移动对象)。
http://doc.trolltech.com/4.2/qgraphicsitem.html#itemChange方法看起来像它,但在用户移动对象时不会调用它。
我正在使用Qt 4.6
事实证明你必须设置一个标志来启用此事件: item-> setFlag(QGraphicsItem :: ItemSendsGeometryChanges,true);
但是现在每次项目的变化都会触发事件。我希望只有在用户完成更改时才会有事件。
答案 0 :(得分:1)
我认为最好的方法是为你的物品实施mouseRelease事件,当它被触发时你将能够知道物品是否被移动。如果项目已移动,则接受该事件,否则将事件发送到基类。
例如:
void YourItem::mouseReleaseEvent(QMouseEvent *event)
{
if (wasMoved()) {
//do something and accept the event
} else {
// to the base class
QGraphicsItem::mouseReleaseEvent(event);
}
}
WasMoved()是您了解项目是否已移动的方法
答案 1 :(得分:1)
除非它总是不能正常工作,因为你并不总是得到一个mouseReleaseEvent ......
正在执行拖动的代码是阻塞代码,所以你可以把它放在那里,因为代码只会在你发布鼠标按钮后继续运行...(QT 4.7 +)