Pregunta

En mi aplicación tengo QGraphicsScene con mapa de píxeles añadió y todo se ve en QGraphicsView con barras de desplazamiento fuera. La ventana del programa es más pequeño mapa de píxeles y al pulsar las teclas de flecha o mover la rueda del ratón se mueve el mapa de píxeles.

¿Cómo desactivo que por lo que incluso si el mapa de píxeles es más grande que la ventana no se moverá por el teclado o el ratón a menos que utilice mis eventos para eso?

(traté de establecer la propiedad interactiva en false, pero que no funcionó)

¿Fue útil?

Solución

Creo que la solución más sencilla sería establecer FocusPolicy de QGraphicsView a NoFocus y luego procesar todos los eventos clave en la ventana principal.

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

Otros consejos

Creo que la forma más fácil es usar QGraphicsView::setSceneRect() para establecer el área que se permite la vista de visualizar.

Si define sceneRect() de la vista al tamaño real del widget vista (o sólo ligeramente más pequeño), entonces no va a ser capaz de desplazarse o pan fuera de este rectángulo.

No sé si hay una manera más fácil, pero la forma moderadamente fácil sería hacer una clase que hereda la clase QGraphicsView, y anula el ratón y eventos de pulsación de teclas.

La forma más difícil implicaría la instalación de un filtro de eventos en el widget.

En mi opinión, la solución más difícil de fuerza bruta sería detectar el cambio a través de algún tipo de señal, y la puso de nuevo a la forma en que estaba.

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