2014-05-14 4 views
1

stackedWidget을 가지고 있으며, 해당 자식 유형의 모든 mouseClickEvents를 독립형으로 캡처하려고합니다. 나중에 추가하고 제거 할 수 있습니다 (삭제되지 않은 stackedWidget에서 제거됨). 이 작품을 어떻게 만들 수 있습니까?Qt : 자식 전에 이벤트 캡처

당신은 당신의 자식 위젯에 이벤트 필터를 설치할 수 있습니다

답변

0

는 이벤트 필터는 새로운 클래스가 될 수 있습니다 또는 중요한 것은있는 기존의 클래스는이 eventFilter 방법을 구현하고

QObject를

에서에서 변형 된 예 (상속 Documenation)

bool FilterObject::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (obj == textEdit) { 
     if (event->type() == QEvent::mousePress) { 
      QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); 
      qDebug() << "Ate mouse press" << mouseEvent->x() << " " << mouseEvent->y(); 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     // pass the event on to the parent class 
     return FilterObject::eventFilter(obj, event); 
    } 
} 

당신은 찾을 수 위젯이

FilterObject * filterObj = new FitlerObject(this); 

Q_FOREACH(QObject obj, pWin->children()) 
{ 
    obj->installEventFilter(filterObj); 
} 

을 만든 후 이벤트 필터를 설치하려면 다음을 수행 여기 http://qt-project.org/doc/qt-4.8/qobject.html#eventFilterhttp://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter

0

아이를 얻는 방법에 대한 설명에서 전체 DOCO 이벤트를 제어합니다

http://falsinsoft.blogspot.com/2014/04/qt-get-child-controls-events.html

기본적으로 방법은 이미 제안 이벤트 필터입니다. 그러나 "문제"는 윈도우 GUI가 Qt 디자이너 도구를 통해 관리되는 경우 필터를 설치하는 방법입니다. 이 경우 자식 컨트롤을 만드는 코드를 직접 제어 할 수 없으며 대신 다른 방법을 사용하여 주 개체의 "ChildAdded"이벤트를 가져 와서 설명 된대로 각 새 자식 컨트롤에 필터를 설치해야합니다. 위의 링크.