Cita:
Iniciado por dehm Cuando dices que el objeto Cruceta no es un QWidget y que no tiene "presencia" en el formulario, te refieres al QGraphicsView como ese QWidget?
Vamos a bajar un momento a nivel de API de windows. No hay que perder de vista que los controles gráficos de Qt acaban pasando antes o después por este punto.
Cada control de usuario (que son sensibles al teclado y al ratón) se crea haciendo uso de una función especial de la api de windows:
- CreateWindow
- CreateWindowEx
Estas funciones dan de alta una nueva zona "sensible" en la memoria de la pantalla.
Cuando el usuario, con el ratón, hace click en un punto de la pantalla, el evento es gestionado en primera instancia por el sistema operativo. Éste comprueba sobre qué region "sensible" se ha lanzado el evento. A partir de ese dato encuentra qué aplicación es la responsable de dicha región. Con esta información, el SO avisa a la aplicación sobre el nuevo evento... la aplicación entonces recibe el evento y lo acaba canalizando hasta que llega al control pertinente.
¿Por qué te cuento todo este coñazo? Por una sencilla razón: Si tu delegas la responsabilidad de pintar un componente añadiendo dicho componente a un contenedor (un diálogo, un layout, ...), se acaba creando una región "sensible" que será susceptible de recibir eventos del teclado y el ratón. Si tu pintas "a mano" un control... eso no es más que una serie de trazos en pantalla que no están asociados a nada, luego esa representación no va a recibir en la vida un evento del sistema operativo.
Espero que, tostonazo aparte, haya quedado un poco más claro el tema de los controles de usuario y los eventos :)