본문 바로가기
QT and Symbian

eventFilter(QObject* object, QEvent* event) 함수 사용하기

by leo21c 2015. 8. 21.

각 Widget의 Event를 처리하기 위해서 subclass를 이용해서 class를 만들어 사용하는 것 보다 eventFilter(QObject* object, QEvent* event)함수를 이용하는 것이 개발을 빨리 진행할 수 있다.

Dialog에 Widget을 배치하고 Dialog class의 생성자에 필요한 Widget별로 installEventFilter()함수를 설정한다.

ex)
QLineEdit Widget을 사용하는데 Key Event를 확인하고 싶을 경우에는 아래와 같이 생성장에 설정을 한다.

QLineEdit *ed = new QLineEdit(this);
ed->installEventFilter(this);


bool Dialog::eventFilter(QObject* object, QEvent* event)
{
  if (object == ed) {
   QEvent::Type type = event->type();
   if (event->type() == QEvent::KeyPress) {
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
    if (keyEvent->key() == Qt::Key_Enter) {
fileSaveClick();
return true;
    }
   }
  }
  
return QDialog::eventFilter(object, event);
}

return을 할 때 false를 하면 Dialog에서 기존과 같이 처리가 된다. 따라서 내가 원하는 방식을 처리하고 기존 방식을 처리하지 않게 하기 위해서는 true를 리턴해야 한다.


<주의>
QTableWidget은 object를 가지고 하면 안된다.위젯 내부에 있는 viewport()에 
installEventFilter(this)를 해야 우리가 윈하는 이벤트를 처리할 수 있다.
QTableWidget *tw = new QTableWidget(this);
tw->viewport()->installEventFilter(this);

또한 MouseMove event를 처리하기 위해서는 widget에 setMouseTracking( true )를 설정 해줘야 한다.