Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/08/2015, 19:10
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Key y Mouse listeners con c++ para linux

Hola:

En Qt tienes las clases que capturan eventos.
Puedes usar un objeto QEvent para capturar cualquier evento, mediante casting, o directamente usar objetos específicos para el evento que quieras capturar.

Este es un ejemplo de un widget que captura el botón izquierdo y del medio del ratón, así como el movimiento de la rueda, y añade una unidad a un contador.

Igualmente lee la tecla pulsada.

Está creado desde un widget estandar:
Código C++:
Ver original
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QMouseEvent>
  5. #include <QWheelEvent>
  6. #include <QKeyEvent>
  7. #include <QDebug>
  8.  
  9. #include "ui_widget.h"
  10.  
  11. class Widget : public QWidget, private Ui::Widget
  12. {
  13.     Q_OBJECT
  14.  
  15. public:
  16.     explicit Widget(QWidget *parent = 0);
  17.     void mousePressEvent (QMouseEvent* m_evento);
  18.     void wheelEvent(QWheelEvent* w_evento);
  19.     void keyPressEvent(QKeyEvent *k_evento);
  20.  
  21.  
  22. private:
  23.     int contador;
  24. };
  25.  
  26. #endif // WIDGET_H

Código C++:
Ver original
  1. #include "widget.h"
  2.  
  3. Widget::Widget(QWidget *parent) :
  4.     QWidget(parent)
  5. {
  6.     setupUi(this);
  7.     contador=0;
  8. }
  9.  
  10. void Widget::mousePressEvent(QMouseEvent *m_evento)
  11. {
  12.     if (m_evento->buttons()==Qt::LeftButton || m_evento->buttons()==Qt::MiddleButton)
  13.     {
  14.         contador++;
  15.         qDebug()<<"Numero de clicks: "<<contador;
  16.     }
  17. }
  18.  
  19. void Widget::wheelEvent(QWheelEvent *w_evento)
  20. {
  21.     contador++;
  22.     qDebug()<<"Numero de clicks: "<<contador;
  23. }
  24.  
  25. void Widget::keyPressEvent(QKeyEvent *k_evento)
  26. {
  27.     qDebug()<<k_evento->text();
  28. }

Básicamente consiste en implementar las funciones virtuales:
Código C++:
Ver original
  1. void mousePressEvent (QMouseEvent* m_evento);
  2.     void wheelEvent(QWheelEvent* w_evento);
  3.     void keyPressEvent(QKeyEvent *k_evento);

Para dotarles de la funcionalidad que estés necesitando.

P.D. Si he dicho muchas tonterías espero que eferion o jc_moj me corrijan
__________________
Mi calculadora en Qt