PDA

View Full Version : Event Filter doesnt work as expected



Hossein
12th July 2013, 20:38
I tried to override the keypress event for my lineEdit control using eventFiltering .
but when i run my application it doesnt do anything! i even set a break point inside the eventFiltering method , but i never get there!!?
This is my source codes :
MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();


protected:
bool eventFilter( QObject* sender, QEvent* event);

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H



MainWindow.cpp:


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

bool MainWindow::eventFilter(QObject *sender, QEvent *event)
{
if (sender == ui->lineEdit)
{
if(event->type()== QEvent::KeyPress)
{
QKeyEvent * keyEvent = (QKeyEvent*)(event);
if( keyEvent->key() == Qt::Key_Control)
{
QMessageBox::information(this,"Salam","Test");
return true;
}else
{
return false;
}
}
}
return QWidget::eventFilter(sender,event);
}

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

ChrisW67
12th July 2013, 21:01
From the friendly QObject::eventFilter() docs:


Filters events if this object has been installed as an event filter for the watched object.

So, where have you installed this QObject as an event filter (QObject::installEventFilter())? You use this if you want to see all the events destined for another QObject before that object sees them.

If you want to see the key press events that make it to this QWidget then you want to reimplement QWidget::keyPressEvent().
If you want to see all events then reimplement QWidget::event().