Pergunta

Na minha aplicação tenho QGraphicsScene com pixmap adicionado e tudo é visto em QGraphicsView com barras de rolagem fora. A janela do programa é menor, em seguida, pixmap e quando eu pressionar as teclas de seta ou roda de movimento do mouse o pixmap está sendo movido.

Como faço para desativar que por isso mesmo se o pixmap é maior do que a janela não vai ser movido por teclado ou mouse a menos que eu use meus eventos para isso?

(I tentou definir a propriedade interativo para falsa, mas que não funcionou)

Foi útil?

Solução

Eu acredito que a solução mais fácil seria set FocusPolicy de QGraphicsView para NoFocus e, em seguida, processar todos os eventos-chave na janela principal.

ui->graphicsView->setFocusPolicy( Qt::NoFocus );

Outras dicas

Eu acho que a maneira mais fácil é usar QGraphicsView::setSceneRect() para definir a área que a visão é permitido visualizar.

Se você definir sceneRect() da vista para o tamanho real do widget vista (ou apenas ligeiramente menor), então não vai ser capaz de rolagem ou fora pan deste retângulo.

Eu não sei se existe uma maneira mais fácil, mas a maneira moderadamente fácil seria fazer uma classe que herda a classe QGraphicsView, e substitui a eventos de mouse e pressione a tecla.

A maneira mais difícil seria envolver a instalação de um filtro de eventos no widget.

Na minha opinião, a solução mais difícil de força bruta seria de detectar a mudança através de algum tipo de sinal, e configurá-lo de volta a ser como era.

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