Pergunta

QGraphicsScene do Qt fornece algumas agradável funcionalidade fora da caixa:. Usuário pode selecionar objetos e movê-los

Eu quero mais uma coisa - ser notificado quando o usuário terminar de mover o objeto. Há eventos de nível mais baixo, como o movimento do mouse, imprensa, autorização, mas eu não gostaria de reimplementar a funcionalidade que já está lá (movendo os objetos).

O http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange método se parece com ele, mas ele não é chamado quando o usuário move o objeto.

Eu estou usando Qt 4.6

Acontece que você tem que definir um sinalizador para ativar este evento: item-> setFlag (QGraphicsItem :: ItemSendsGeometryChanges, true);

Mas agora o evento é acionado mudança Corrdinates de cada item de tempo. Eu quero ter um evento apenas quando a mudança é feita pelo usuário.

Foi útil?

Solução

Eu acho que a melhor maneira está implementando o evento mouseRelease para seus itens, quando ele é acionado, você será capaz de saber se o item foi movido ou não. Se o item foi movido aceitar o evento, outra pessoa enviar o evento para a classe base.

Por exemplo:

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

WasMoved () é o seu método para saber se o item foi movido

Outras dicas

exceto que ele não pode trabalhar sempre como você não sempre obter uma mouseReleaseEvent ...

O código que está fazendo o arrastamento está a bloquear código no entanto, para que você possa colocá-lo lá, como o código só vai continuar depois de lançado botão do mouse e ele sempre funciona ... (QT 4.7 +)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top