Pregunta

Lo siento por la pregunta de mi principiante ... ¿Cuál es la forma más fácil de definir procedimientos que se ejecutan cuando se produce MousePressEvent o MouseReleaseEvent?

Por ahora estoy definiendo mi propia clase (clase MyGraphicsView), que hereda QGraphicsView y estoy reimplementar los eventos del ratón (que son funciones virtuales). Funciona bien, pero ¿hay alguna manera de resolver este problema sin la necesidad de definir una nueva clase? ¿Puedo conectar Eventos con ranuras de alguna manera?

Gracias por su ayuda.

¿Fue útil?

Solución

Este hilo en el foro de Qt Centro describe bastante así cuáles son sus opciones. En pocas palabras:

  1. Haz lo que están haciendo (es decir, la subclasificación y reimplementar)

  2. Trabaja con un filtro de eventos tal como se describe en el hilo y el enlace en el mismo.

Otros consejos

Debido a que los eventos de ratón están protegidos funciones virtuales, el método más sencillo es exactamente lo que está haciendo. No veo ninguna razón por la definición de una subclase causaría un problema, por eso digo palo con lo que tienes.

Si realmente quiere conectar los eventos con ranuras, puede hacer que su aplicación subclase de mousePressEvent(), por ejemplo, simplemente emit mousePressSignal(). Por supuesto, también tendría que mousePressSignal() declarar en la sección de la cabecera signals subclase.

puedo ver ningún problema con anulando QGraphicsView::mousePressEvent y QGraphisView::mouseReleaseEvent. El concepto de control de eventos QGraphicsView / QGraphicsScene / QGraphicsItem conjunto está construido en torno a las funciones de control de eventos virtuales.

Además, también el Qt documentación sugiere que "se puede proporcionar a su interacción escena personalizada propia, mediante la creación de una subclase de QGraphicsView y reimplementar el ratón y controladores de eventos clave. "

A partir de su pregunta,

  

¿hay alguna manera de   resolver este problema sin tener que   definir una nueva clase?

La respuesta es No . No se puede .

Hay que tener heredan de la clase que desea controlar los eventos.

  

¿Puedo Eventos conectar con ranuras   de alguna manera?

No . No se puede eventos de conexión a ranuras , pero sólo las señales se pueden conectar a las franjas horarias.

La forma en que están haciendo ahora es la manera de hacerlo.

Puede utilizar los filtros de sucesos: Ver http: //doc.qt. nokia.com/4.6/qobject.html#eventFilter O, para los elementos gráficos, en particular, http://doc.qt.nokia. com / 4,6 / qgraphicsitem.html # sceneEventFilter

Tenga en cuenta que para este último, algunos eventos de cambio:. QMouseEvent convierte QGraphicsSceneMouseEvent por ejemplo, así que asegúrese de filtro para el tipo correcto

¿Qué es más fácil, depende de la situación. Si usted tiene una subclase de todos modos, reimplementar el método virtual es a menudo más recta hacia adelante que el enfoque de filtro de eventos. Pero si desea realizar un seguimiento de varios widgets de varias clases diferentes y necesitan un manejo especial para un determinado evento, la subclasificación sólo para este propósito es tedioso y no un buen diseño (y hace, por ejemplo, el uso de diseñador para los reproductores más dura).

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