2010-10-26 10 views
18

Tengo mi propia clase basada en QWidget. Puse este widget en QMainWindow y necesito capturar el clic del mouse en este widget.qt QWidget clic

me trataron:

connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0))); 

Pero no pasa nada. ¿Cómo puedo hacerlo?

Respuesta

26

QWidget no tiene una señal de clic(), y QMainWindow no tiene una ranura exit(). Es imposible conectarse a una señal inexistente y una ranura inexistente. El valor de retorno de la conexión debe ser verdadero si la conexión es exitosa. Verifique este valor cuando realice conexiones para asegurarse de que su código funcione correctamente.

Para salir de la aplicación, se debe llamar qApp->quit()

También, como se ha mencionado otros, tendrá que instalar un EventFilter o reimplementar la

void QWidget::mousePressEvent (QMouseEvent * event) [virtual protected] 

o

void QWidget::mouseReleaseEvent (QMouseEvent * event) [virtual protected] 

métodos.

Hay muchos ejemplos en el documento oficial de Qt, this, por ejemplo, se reimplementa el método mousePressEvent(QMouseEvent *event).

Para la opción eventFilter, vea this pequeño ejemplo.

Espero que esto ayude.

5

A QWidget no tiene señal clicked. Para que esto funcione, usa eventos. Todos los widgets apoyan eventos, así que hay algo de trabajo manual para hacer, pero no mucho:

  1. reemplazar la función event para su widget (que se derivan de QWidget
  2. responder a eventos de tipo QEvent:: MouseButtonPress

Alternativamente, agregue un método eventFilter.

Google las clases y los métodos que mencioné para los ejemplos del código y llegar a una solución completa según su necesidad exacta ds.