Como chegar QGraphicsScene eventos de movimentação item de relatório
-
18-09-2019 - |
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.
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 +)