2015-01-29 3 views
2

저는 Qt 플랫폼의 C++ 프로그래머입니다.Qt 또는 다른 언어. 이벤트 루프

궁금한데, 어떻게 이벤트 루프가 이벤트를 보낼 위젯 (주로 마우스/키보드 이벤트)을 "아는"것입니까? 마우스 좌표와 z- 순서를 기반으로 수행됩니까? 키보드의 이벤트는 어떻게됩니까?

감사합니다.

답변

3

이벤트 루프는 알지 못합니다. 이것은 다른 코드 비트에서 수행됩니다.

키보드로 검색하는 용어는 "포커스"입니다. 정확히 하나의 창에 시스템 전체 (또는 다중 사용자 시스템에서 키보드 당 하나 이상의 창)의 포커스가 있습니다. OS는 키 입력을 해당 창에 전달합니다. Qt는 네이티브 윈도우 핸들에서 Qt 객체를 찾습니다. 마찬가지로 마우스 클릭은 대부분 OS에서 처리됩니다.

0

모르겠다.

이벤트를 캡처하려면 이벤트를 캡처하거나 전달하도록 허용하는 이벤트 필터를 만들어야합니다.

bool OGL_widget::eventFilter(QObject *obj, QEvent *event) { 
    switch (event->type()) { 
    case QEvent::KeyRelease: 
    case QEvent::KeyPress: { 
     QKeyEvent *key = static_cast<QKeyEvent*> (event); 
     if (!key->isAutoRepeat()) 
      key_event_queue << *key; 
    } 
    break; 
    case 1001: 
    case 1002: { 
     Savestate_event *save = static_cast<Savestate_event*> (event); 
      save_event_queue << *save; 
    } 
    break; 
    } 

    return QObject::eventFilter(obj, event); 
} 

는 Qt는 워드 프로세서에서 events이 잘 쓰여진 기사를 살펴 보자 :

는 여기에 내가 몇 시간 전에 만들어진 아주 간단한 이벤트 필터입니다.