Pregunta

QGraphicsScene

Qt proporciona algunas funcionalidades agradable fuera de la caja:. Usuario puede seleccionar objetos y moverlos

Quiero una cosa más - obtener notificaciones cuando el usuario ha terminado de mover el objeto. Hay eventos de nivel inferior, como el movimiento del ratón, prensa, autorización, pero yo no les gustaría volver a implementar la funcionalidad que ya está allí (mover los objetos).

El http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange método se parece a ella, pero no se llama cuando el usuario mueve el objeto.

Estoy usando Qt 4.6

Resulta que hay que establecer un indicador para que este evento:   Item-> setflag (QGraphicsItem :: ItemSendsGeometryChanges, true);

Pero ahora el evento se dispara el cambio corrdinates de cada artículo el tiempo. Quiero tener un evento sólo cuando el cambio se realiza por parte del usuario.

¿Fue útil?

Solución

Creo que la mejor manera está llevando a cabo el evento mouseRelease para sus artículos, cuando se dispara usted será capaz de saber si el artículo que se ha movido o no. Si el artículo se trasladó aceptar el caso, de lo contrario enviar el evento a la clase base.

Por ejemplo:

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

WasMoved () es su método para saber si el artículo que fue trasladado

Otros consejos

A excepción de que no puede trabajar siempre y cuando no siempre se consigue un mouseReleaseEvent ...

El código que está haciendo el arrastre está bloqueando código sin embargo, lo que puede poner por allí, ya que el código sólo se debe continuar después de soltar el botón del ratón y que siempre funciona ... (QT 4.7 +)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top