Buscar en el Blog

martes, 3 de marzo de 2015

Qt C++ Capturar la tecla presionada - Keypress

Agregamos la siguiente linea en el archivo de cabecera para reimplementar la funcion eventFilter.

//Filtrar los eventos
bool eventFilter(QObject *obj, QEvent *event);

en el archivo cpp implementamos la funcion.

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
     //Si el evento es del Tipo Keypress
    if (event->type() == QEvent::KeyPress) {
    //Hacemos un Cast
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    qDebug("Tecla Presionada %d", keyEvent->key());
    return true;
    } else {
    // 
    return QObject::eventFilter(obj, event);
    }
}
Ademas incluir en el archivo cpp los siguientes archivos.



#include <QKeyEvent>
#include <QDebug>


 
 
 
Ahora vamos instalar el eventFilter, es decir, en que objecto queremos hacer 
el filtro  de eventos. Para eso colocamos la siguiente linea de codigo en el
constructor de la clase.
 
 ui->lineEdit->installEventFilter(this);
 
 
 
 
Entonces el archivo quedaria asi.
 

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{


    ui->setupUi(this);
   


 ui->lineEdit->installEventFilter(this);
}


MainWindow::~MainWindow()
{
    delete ui;
}




bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
    //and here put your own logic!!
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    qDebug("Ate key press %d", keyEvent->key());
    return true;
    } else {
    // standard event processing
    return QObject::eventFilter(obj, event);
    }
}

Al Ejecutar y digitar en la aplicacion en la ventana Output debe salir un resultado 
similar al de la siguiente imagen.




Nota: EL Debug sirve para mostrar los resultados en la consola de Qt Creator

No hay comentarios:

Publicar un comentario